note.nkmk.me

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

Date: 2018-03-08 / tags: Python, NumPy
このエントリーをはてなブックマークに追加

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()は第一引数に渡したndarrayTrueの要素が一つでもあるときに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]

複数条件の場合

複数の条件を組み合わせたい場合は、それぞれの条件式を()で囲み&|でつなげればOK。

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]
スポンサーリンク
シェア
このエントリーをはてなブックマークに追加

関連カテゴリー

関連記事