numpy
アレイでany
を直接関数として使用することはなぜ可能ですか?Pythonの "any()"関数がnumpy配列で動作するのはなぜですか?
In [30]: any(np.zeros(4))>0
Out[30]: False
私はnumpyののany()
-methodがarray
自身に思いましたか?
これはpython
関数か実際のnumpy
メソッドですか?
numpy
アレイでany
を直接関数として使用することはなぜ可能ですか?Pythonの "any()"関数がnumpy配列で動作するのはなぜですか?
In [30]: any(np.zeros(4))>0
Out[30]: False
私はnumpyののany()
-methodがarray
自身に思いましたか?
これはpython
関数か実際のnumpy
メソッドですか?
1次元配列の場合、組み込みのPython-any
-functionは、bool
にキャスト可能なアイテム(および1次元配列はこれらの条件を満たします)ではなく、多次元配列のiterableを必要とするだけです動作しません。
>>> import numpy as np
>>> any(np.ones((10, 10)))
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
>>> np.any(np.ones((10, 10)))
True
あなたが最初の次元を反復配列の反復処理場合は、多次元配列を持っている場合、あなたは各反復でarray
(非数)を取得しますので、だこと。これらのarray
は、bool
にキャストできません。したがって、例外がスローされます。
しかし、それは入力型(array
)の意識だと、それはそのany
ニーズ反復のpythonのを避けることができるので、np.any
はany
よりもアレイ上(ほとんどの場合)高速になります。
In [0]: arr = np.zeros((1000))
In [1]: %timeit any(arr)
Out[1]: 215 µs ± 4.29 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [2]: %timeit np.any(arr)
Out[2]: 31.2 µs ± 1.41 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
副題として、おそらくany(np.zeros(4))>0
の代わりにany(np.zeros(4) > 0)
を使用したかったでしょう。 any
の結果がゼロ以上である(True
任意の要素がないゼロの場合)は、第2のか否かをチェックしながら
最初のチェックは、あなたの配列内の任意の要素は、ゼロ以上である場合。
良い説明とタイミングの例。あなたはサイドノートについて確かですか?任意の(np.zeros(4)).__ __(0) '==>' True'、 'any(np.zeros(4)).__ lt __(0)' ==> 'False'などです。 「要素が等しいか等しいかどうかをチェックする」と同じです。 – salient
'>'のような比較演算子と算術演算子は、配列に関する要素ごとの操作/チェックを行うので、私はかなり確信しています。あなたは、 'any'の結果が' 0'より大きいかどうかをチェックしたいことを除いては、たとえば、 '' any(np.array([ - 1,0,0])> 0''は 'True'を返しますが、' 'any(np.array([、1,0、0] '。それはあなたが必要としている(そしてあなたが言っていない)ことによるので、それは私が間違っているかもしれません。 :) – MSeifert
ああ、区別を参照してください:) – salient
numpy
配列はiterableです。これはすべて組み込みのany
が引数を期待しています。 any
は、反復可能な要素のすべてが偽であればFalse
を返します。すべてがゼロです。次に、比較False > 0
もFalse
となり、観測値が得られます。
別名を付けていない限り、Pythonの組み込み関数です。 – zwer