NumPy配列の要素が1つでも条件を満たすか確認するany()の使い方

numpy.any()は、配列内に1つでも条件を満たす要素があるかどうかを確認するために使う関数です。具体的には、配列内の要素が1つでも True であれば True を返します。一方で、配列内の全ての要素が False の場合に False を返します。

これと似たものにnumpy.all()というものもあります。こちらは、配列内の全ての要素が条件を満たすかどうかを確認することができる関数です。具体的には、配列内の全ての要素が True の場合のみ True を返します。そして、配列内の要素に1つでも False があれば False を返します。これについては、以下のページで解説しています。

これらを使うことで配列の要素の確認を効率化することができます。このページでは、このうちnumpy.any()について解説します。

NumPy配列の条件を満たす要素の操作まとめ
NumPy配列では、条件を満たす要素の値を取得したり、数をカウントしたり、置換したりなど様々な操作が可能です。こうした操作については、『NumPy配列の条件を満たす要素の確認や置換・カウントの方法まとめ』で全てまとめていますので、ぜひご確認ください。

目次

1. 書式

まずは、基本的な書き方を確認しましょう。

numpy.any関数

書き方:

np.any(a, axis=None, out=None, keepdims=<no value>)

パラメーター:

a: array_likeオブジェクト(配列やリスト、タプルのこと)
NumPy配列や、NumPyの配列に変換可能なオブジェクト(リストやタプルなど)を渡します。
axis: 整数(int型)か整数(int型)のタプル(オプション)
論理和の削減を行う軸を指定します。デフォルトのNoneでは配列内の全ての次元軸の要素を一括で判定します。タプルで渡すことで、複数の軸を同時に指定することも可能です。
out: 配列(ndarray), (オプション)
戻り値の配列を代入する配列を指定します。戻り値の配列と代入先の配列のshapeが合致している必要があります。データ型は代入先の配列のものが引き継がれます。
keepdims: ブール値(オプション
Trueにすると、戻り値の配列の次元数が、元々の配列 a の次元数のままで維持されます。削減される軸の要素数は1になります。このオプション引数を使うことで、戻り値の配列を元々の配列aに適切にブロードキャストして適用することが可能になります。

戻り値: 

要素がブール値の配列:
ブール値か、要素がブール値の配列を返します。オプション引数outで出力先を指定している場合、出力先の配列の参照を返します。

一緒に確認したい関数:

  • ndarray.any同じ機能のメソッド
  • all配列内の全ての要素が条件を満たすかどうかを確認

2. サンプルコード

それでは、np.any()の使い方をサンプルコードで確認していきましょう。

この関数は、渡した配列の要素が1つでも True であれば True を返します。

In [1]:
# Trueの要素が1つでもあればTrueを返す。
import numpy as np
x = np.array([True, False])
np.any(x)
Out[1]:
True

True が1つも含まれていない場合のみ False を返します。

In [2]:
# Trueが含まれていない場合のみFalseを返す。
x = np.array([False, False])
np.any(x)
Out[2]:
False

なお、False と判定されるのは、全ての要素がブール値 False または数値の 0 の場合です。数値の 0 も False と判定される理由は、Pythonでは False と 0 は同じ値として処理されるためです。

In [3]:
#  全ての要素がFalseか0の場合のみFalseと判定
np.any([False])
Out[3]:
False
In [4]:
np.any(0)
Out[4]:
False

具体的な使い方

この関数は、具体的には次のように、配列内に1つでも条件を満たす要素があるかどうかを確認するために使います。

In [4]:
# 配列 x を作成
x = np.arange(5)
x
Out[4]:
array([0, 1, 2, 3, 4])
In [5]:
# 配列内に 4 以上の要素が1つでも存在するかどうかを確認
np.any(x >= 4)
Out[5]:
True
In [6]:
# 配列内に 5 以上の要素が1つでも存在するかどうかを確認
np.any(x >= 5)
Out[6]:
False

多次元配列を渡す場合

np.any()に多次元配列を渡した場合、全ての次元軸の要素を同時に判定します。

In [7]:
# 配列を作成
x = np.arange(6).reshape(2, 3)
x
Out[7]:
array([[0, 1, 2],
       [3, 4, 5]])
In [8]:
# 多次元配列の全ての要素を対象に判定
np.any(x <= 1)
Out[8]:
True

次元軸を指定

オプション引数 axis= で判定を行う次元軸を指定することができます。

In [9]:
# 指定した軸(列)ごとに判定
np.any(x <= 1, axis=0)
Out[9]:
array([ True,  True, False])
In [10]:
# 指定した軸(行)ごとに判定
np.any(x <= 1, axis=1)
Out[10]:
array([ True, False])

次元数を維持

オプション引数 keepdims=True で次元数を維持することができます。この場合、指定していない軸の要素数が1になります。つまり、shape(m, n)の配列の場合、axis=None なら shape(1, 1) の配列を作成します。axis=0 なら shape(1, n) の配列を作成します。axis=1 なら shape(m, 1) の配列を作成します。覚えておくとブロードキャストが楽になります。

In [11]:
# keepdimsで元の次元数を維持
np.any(x <= 1, keepdims=True)
Out[11]:
array([[ True]])
In [12]:
np.any(x <= 1, axis=0, keepdims=True)
Out[12]:
array([[ True,  True, False]])
In [13]:
np.any(x <= 1, axis=1, keepdims=True)
Out[13]:
array([[ True],
       [False]])

既存の配列を上書き

オプション引数 out= で、判定結果の配列で既存の配列を上書きすることができます。この場合、出力される配列と上書きされる配列のshapeが合致している必要があります。また要素の型は上書きされる配列のものがそのまま引き継がれます。つまり、上書きされる配列のデータが数値の場合、True の要素は 1 、False の要素は 0 に上書きされます。

In [14]:
#  判定用の配列
x = np.arange(6).reshape(2, 3)
x
Out[14]:
array([[0, 1, 2],
       [3, 4, 5]])
In [15]:
# 上書き用の配列
a = np.array([0.0, 0.0])
a
Out[15]:
array([0., 0.])
In [16]:
# 判定結果で a を上書き
np.any(x >= 3, axis=1, out=a)
Out[16]:
array([0., 1.])

ndarray.anyメソッド

なお、np.any()関数とまったく同じ、ndarray.any()メソッドもあります。オプション引数はすべて同じです。

In [17]:
#  メソッドとして使用することも可能
x = np.arange(6).reshape(2, 3)
(x>4).any(axis=1)
Out[17]:
array([False,  True])
In [18]:
(x>=4).any(axis=1, keepdims=True)
Out[18]:
array([[False],
       [ True]])

3. まとめ

以上、np.any()は、配列内に1つでも条件を満たす要素が存在するかどうかを確認するための関数です。



よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次
閉じる