1. ホーム
  2. python

[解決済み] ある値より小さい行列の値をすべて数える

2023-04-13 05:53:27

質問

行列(2次元配列)の中で、200未満の値をすべて数えなければならない。

このために書き下ろしたコードは

za=0   
p31 = numpy.asarray(o31)   
for i in range(o31.size[0]):   
    for j in range(o32.size[1]):   
        if p31[i,j]<200:   
            za=za+1   
print za

o31 は画像で、それを行列に変換して値を求めています。

もっと簡単な方法はないでしょうか?

どのように解決するのですか?

この numpy.where 関数はあなたの友人です。これは配列データ型をフルに活用するように実装されているため、大きな画像では、あなたが提供する純粋な Python ソリューションよりも速度が向上していることに気づくはずです。

numpy.whereを直接使用すると、特定の値が条件に一致するかどうかを示すブール値のマスクが得られます。

>>> data
array([[1, 8],
       [3, 4]])
>>> numpy.where( data > 3 )
(array([0, 1]), array([1, 1]))

そして、このマスクは実際の値を得るために直接配列にインデックスを付けるために使用することができます。

>>> data[ numpy.where( data > 3 ) ]
array([8, 4])

ここから先は、どのような形式で結果を得たいかによります。