爲什麼可以直接使用any
作爲numpy
陣列的功能?Pythons爲什麼「any()」函數在numpy數組上工作?
In [30]: any(np.zeros(4))>0
Out[30]: False
我想numpy的的any()
- 方法是在array
本身?
這是python
函數還是實際的numpy
方法?
爲什麼可以直接使用any
作爲numpy
陣列的功能?Pythons爲什麼「any()」函數在numpy數組上工作?
In [30]: any(np.zeros(4))>0
Out[30]: False
我想numpy的的any()
- 方法是在array
本身?
這是python
函數還是實際的numpy
方法?
對於一維數組它的工作原理,因爲內置Python- any
- 功能只需要一個迭代與可轉換爲bool
S(和一維數組滿足這些條件)的項目,但對於多維數組它將不起作用:
>>> 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
s不能投射到bool
s。所以它拋出異常。
但np.any
將在陣列比any
更快(在大多數情況下),因爲它意識到了輸入型(array
)的,它可避免蟒蛇迭代是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
任何元件是不零)是零以上時。
很好的解釋和時間的例子。你確定這個附註嗎? 'any(np.zeros(4)).__ eq __(0)'==>'True','any(np.zeros(4)).__ lt __(0)'==>'False'等等,與「檢查任何元素是否等於/ above/... zero」大致相同。 – salient
比較和算術運算符像'>'在數組上執行元素操作/檢查,所以我非常確定。除了你想檢查'any'的結果是否大於'0'。例如'any(np.array([ - 1,0,0]))> 0'返回'True',但是'any(np.array([ - 1,0,0])> 0)'返回'False '。這取決於你需要什麼(而你沒有說過)所以也許這是我的錯誤。 :) – MSeifert
啊現在看到了區別:) – salient
A numpy
數組是可迭代的,這是所有內置的any
期望的參數。如果iterable的所有元素都是falsey,則所有的零都是false,則any
返回False
。那麼比較False > 0
也是False
,給你觀察值。
除非你別名,它是一個Python內置的... – zwer