NumPy配列ndarrayの条件を満たす要素数をカウント

NumPy配列ndarrayの条件を満たす要素数をカウントする方法をサンプルコードとともに説明します。 ここでは、

ndarray全体に対して条件を満たす要素数をカウント ndarrayの行・列ごとに条件を満たす要素数をカウント numpy.any()で条件を満たす要素がひとつでもあるか確認(全体、行・列ごと) numpy.all()ですべての要素が条件を満たすか確認(全体、行・列ごと) 複数条件の場合

について説明します。 条件を満たす要素・行・列を抽出したり削除したりしたい場合は以下の記事を参照。

条件を満たす要素を置換したい場合は以下の記事を参照。

ndarray全体に対して条件を満たす要素数をカウント

ndarrayを含む条件式は、bool値(True, False)を要素としてもつndarrayを返す。

import numpy as np

a = np.arange(12).reshape((3, 4))
print(a)
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]

print(a < 4)
# [[ True  True  True  True]
#  [False False False False]
#  [False False False False]]

print(a % 2 == 1)
# [[False  True False  True]
#  [False  True False  True]
#  [False  True False  True]]

算術演算ではTrue = 1, False = 0として扱われるので、bool値のndarrayの合計をnp.sum()で算出すると、条件を満たす要素の個数が得られる。

print(np.sum(a < 4))
# 4

print(np.sum(a % 2 == 1))
# 6

ndarrayの行・列ごとに条件を満たす要素数をカウント

多次元配列に対するnp.sum()は、引数axisを指定することで各軸(各次元)に対してそれぞれの合計を算出します。 二次元配列の場合、引数axis=0で列ごとの合計値、axis=1で行ごとの合計値が得られる。 詳細は以下の記事を参照。

これを利用すると、行・列ごとに条件を満たす要素数をそれぞれカウントできます。

print(np.sum(a < 4, axis=0))
# [1 1 1 1]

print(np.sum(a < 4, axis=1))
# [4 0 0]

print(np.sum(a % 2 == 1, axis=0))
# [0 3 0 3]

print(np.sum(a % 2 == 1, axis=1))
# [2 2 2]

numpy.any()で条件を満たす要素がひとつでもあるか確認(全体、行・列ごと)

np.any()は第一引数に渡したndarrayにTrueの要素が一つでもあるときにTrueを返し、そうでないときはFlaseを返す関数。

print(np.any(a < 4))
# True

print(np.any(a > 100))
# False

np.any()もnp.sum()と同じように、引数axisを指定すると行・列ごとの処理となります。

print(np.any(a < 4, axis=0))
# [ True  True  True  True]

print(np.any(a < 4, axis=1))
# [ True False False]

numpy.all()ですべての要素が条件を満たすか確認(全体、行・列ごと)

np.all()は第一引数に渡したndarrayの要素がすべてTrueのときにTrueを返し、そうでないときはFlaseを返す関数。

print(np.all(a < 4))
# False

print(np.all(a < 100))
# True

np.all()もnp.sum()と同じように、引数axisを指定すると行・列ごとの処理となります。

print(np.all(a < 4, axis=0))
# [False False False False]

print(np.all(a < 4, axis=1))
# [ True False False]

複数条件の場合

複数の条件を組み合わせたい場合は、それぞれの条件式を()で囲み&や|でつなげれば問題ありません。

print((a < 4) | (a % 2 == 1))
# [[ True  True  True  True]
#  [False  True False  True]
#  [False  True False  True]]

print(np.sum((a < 4) | (a % 2 == 1)))
# 8

print(np.sum((a < 4) | (a % 2 == 1), axis=0))
# [1 3 1 3]

print(np.sum((a < 4) | (a % 2 == 1), axis=1))
# [4 2 2]

シェア

関連カテゴリー

Python NumPy

Python, OpenCV, Pillow(PIL)で画像サイズ(幅、高さ)を取得 NumPyのファンシーインデックス(リストによる選択と代入) NumPyで欠損値np.nanを含む配列ndarrayの合計や平均を算出 NumPyで任意の行・列を削除するdeleteの使い方 NumPy配列ndarrayの次元数、形状、サイズ(全要素数)を取得 Pythonでメソッドチェーンを改行して書く NumPyの配列ndarrayの欠損値np.nanを含む行や列を削除 NumPy配列ndarrayの最大値・最小値のインデックス(位置)を取得 pandas.DataFrame, SeriesとNumPy配列ndarrayを相互に変換 NumPy配列ndarrayの対角成分の抽出、対角行列の作成(diag, diagonal) NumPy配列ndarrayから条件を満たす要素・行・列を抽出、削除 NumPyのeyeまたはidentityでone-hot表現に変換 Python, NumPyで行列の演算(逆行列、行列式、固有値など) NumPy配列ndarrayを任意の最小値・最大値に収めるclip NumPyのsortとargsort関数で任意の行・列を基準にソート

Last Updated: 6/26/2019, 10:34:03 PM