0
A
回答
7
您可以簡單地使用sum
:
>>> import numpy
>>> n = numpy.random.randint(0, 2, size=(3,3))
>>> n
array([[1, 0, 1],
[0, 1, 1],
[1, 1, 1]])
>>> n.sum()
7
由於布爾變量有0/1的假/真整數值,即使該數組有那些不爲0或1,你可以使用的一個變種元素這一招:
>>> n = numpy.random.randint(0, 3, size=(3,3))
>>> n
array([[2, 2, 0],
[0, 2, 0],
[1, 1, 0]])
>>> n == 1
array([[False, False, False],
[False, False, False],
[ True, True, False]], dtype=bool)
>>> (n == 1).sum()
2
0
既然你只有1和0,你可以只添加它們放在一起:
import numpy as np
import operator as op
count_of_ones = reduce(op.add, np.ravel(your_array))
1
np.count_nonzero()也適用於二進制矩陣。
In [1]: n = np.random.randint(0, 2, size=(3,3))
In [2]: n
Out[2]:
array([[0, 1, 1],
[0, 0, 0],
[0, 1, 1]])
In [3]: np.count_nonzero(n)
Out[3]: 4
如果0表示False,這將會有用;否則爲真。
0
對於一個更有效的方法(與sum()方法相比),最好使用索引。對於爲例:
import datetime
a = datetime.datetime.now()
sum(spindle_gold)
b = datetime.datetime.now()
len(spindle_gold[(spindle_gold).astype(bool) ])
c = datetime.datetime.now()
給出
0:00:02.155000 0:00:00.025000 3870970
因此,該方法是快約100倍。如果您使用非常大的陣列並需要良好的性能,這是一個很好的方法。
相關問題
- 1. 二進制圖像
- 2. 從原始的二進制圖像數據到Python中的PNG
- 3. Python:二進制圖像轉換
- 4. 二進制圖像中多個斑點的區域python
- 5. 通過讀取二進制數據比較Python中的圖像
- 6. 如何從Python中的二進制數據創建BMP圖像?
- 7. 在Python中將二進制圖像轉換爲二維數組或矩陣?
- 8. 在julia中讀取二進制圖像
- 9. 在Python中獲取零和一個二進制數的個數
- 10. Python中的二進制文件的圖
- 11. 在Python中閱讀原始二進制圖像
- 12. Python OpenCV - 在二進制圖像中查找黑色區域
- 13. 的Python:二進制數
- 14. 使用python嵌入二進制圖像的數據
- 15. Python中的二進制視圖
- 16. 如何將二進制圖像轉換爲Java中的二進制數組?
- 17. 閱讀二進制圖像
- 18. VBScript - 圖像到二進制
- 19. 二進制圖像擴展?
- 20. 創建二進制圖像
- 21. imshow灰色圖像和二進制圖像python
- 22. 在opencv二進制圖像中計數'白色'像素(高效)
- 23. Windows Phone 7中的圖像二進制
- 24. Keras中圖像的二進制分類
- 25. 二進制圖像中的主方向
- 26. 將圖像轉換爲二進制數組和二進制數組轉換爲java中的圖像
- 27. 在Python中解釋二進制數據
- 28. 在Python中乘以二進制數字
- 29. RGB圖像到二進制圖像
- 30. 寫二進制數爲bmp圖像
python3中的減少被guido認爲是過時的,如果我沒有弄錯,轉移到functools上 – 2012-07-12 00:36:40
很高興知道,謝謝。 – mVChr 2012-07-12 00:38:19
@DonQuestion是正確的。然而,它仍然有用,而且確實在'functools'中 - 無論如何2to3工具會重寫它,而在某些版本的2.x(可能是2.7)'reduce'和'functools.reduce'完全相同的情況下。我認爲它不會像3.4內建的東西那樣消失(但是不要在那個引用我!) – 2012-07-12 00:46:12