4

numpy.where が true と評価された場所の数を見つけたいと思います。次の解決策は機能しますが、かなり醜いです。

b = np.where(a < 5)
num = (b[0]).shape[0]

結果の配列で何かを行う前に、num > 0 かどうかを確認する必要がある言語から来ています。num を取得するよりエレガントな方法、または num を見つけるよりも Pythonic なソリューションはありますか?

(IDL に精通している方のために、単純な .xml を複製しようとしていb = where(a lt 5, num)ます。)

4

3 に答える 3

6
In [1]: import numpy as np

In [2]: arr = np.arange(10)

In [3]: np.count_nonzero(arr < 5)
Out[3]: 5 

また

In [4]: np.sum(arr < 5)
Out[4]: 5

b = np.where(arr < 5)[0]とにかく定義する必要がある場合は、 len(b)or b.size(を使用len()した方が少し速いようですが、パフォーマンスの点ではほとんど同じです)。

于 2013-03-12T20:54:42.577 に答える
0

別の方法

In [14]: a = np.arange(100)
In [15]: np.where(a > 1000)[0].size > 0
Out[15]: False
In [16]: np.where(a > 10)[0].size > 0
Out[16]: True
于 2013-03-12T21:08:15.917 に答える
0

これは、where ステートメントの条件が、結果が False に評価されないことを意味する場合にのみ機能します。しかし、それは簡単です:

import numpy as np
a = np.random.randint(1,11,100)
a_5 = a[np.where(a>5)]
a_10 = a[np.where(a>10)]
a_5.any() #True
a_10.any() #False

したがって、もちろん、割り当てる前にこれを試してみたい場合は、次のようにします。

a[np.where(a>5)].any() #True
a[np.where(a>10)].any() #False
于 2013-03-12T20:57:43.150 に答える