4
是否有可能獲得一個numpy數組中非零元素的長度而不迭代數組或掩蓋數組。速度是計算長度的主要目標。獲取numpy數組中非零元素的數量?
基本上,就像len(array).where(array != 0)
。
如果它改變了答案,每一行將以零開始。該數組在對角線上用零填充。
是否有可能獲得一個numpy數組中非零元素的長度而不迭代數組或掩蓋數組。速度是計算長度的主要目標。獲取numpy數組中非零元素的數量?
基本上,就像len(array).where(array != 0)
。
如果它改變了答案,每一行將以零開始。該數組在對角線上用零填充。
假設你的意思是非零元素(和非零行不總數)的總數量:
In [12]: a = np.random.randint(0, 3, size=(100,100))
In [13]: timeit len(a.nonzero()[0])
1000 loops, best of 3: 306 us per loop
In [14]: timeit (a != 0).sum()
10000 loops, best of 3: 46 us per loop
甚至更好:
In [22]: timeit np.count_nonzero(a)
10000 loops, best of 3: 39 us per loop
這最後一個,count_nonzero
,似乎表現良好時,陣列小,太,而sum
招與其說是:
In [33]: a = np.random.randint(0, 3, size=(10,10))
In [34]: timeit len(a.nonzero()[0])
100000 loops, best of 3: 6.18 us per loop
In [35]: timeit (a != 0).sum()
100000 loops, best of 3: 13.5 us per loop
In [36]: timeit np.count_nonzero(a)
1000000 loops, best of 3: 686 ns per loop
len(np.nonzero(array)[0])
?
np.nonzero
返回索引的元組,其長度等於初始陣列中的維數[0]
len
不起作用對我來說:'AttributeError:'元組'對象沒有'sum'' – Renaud
感謝@Renaud,它實際上是越野車,我修好了。 –