Mar*_*rkD 0 python arrays numpy count
我有许多非常大的填充 numpy 2d 数组,简化为数组 A,如下所示。数组 Z 是基本的 pad 数组:
A = np.array(([1 , 2, 3], [2, 3, 4], [0, 0, 0], [0, 0, 0], [0, 0, 0]))
Z = np.array([0, 0, 0])
Run Code Online (Sandbox Code Playgroud)
如何以最简单/最快的Python方式计算数组A中的焊盘数量?这可行(zCount=3),但看起来很冗长、循环且不符合Python风格:
zCount = 0
for a in A:
if a.any() == Z.any():
zCount += 1
zCount
Run Code Online (Sandbox Code Playgroud)
还尝试了单行列表理解,但它不起作用(不知道为什么不起作用):
[zCount += 1 for a in A if a.any() == Z.any()]
zCount
Run Code Online (Sandbox Code Playgroud)
还尝试了列表计数,但“具有多个元素的数组的真值不明确”:
list(A).count(Z)
Run Code Online (Sandbox Code Playgroud)
搜索了一个简单的 numpy 表达式但没有成功。np.count_nonzero 给出 [0] 的完整元素布尔值。[0, 0, 0] 是否有一个单字/一行的计数表达式?(我的实际数组的形状约为 (100,30),并且我有多达数百万个数组。我正在尝试批量处理它们,因此任何生成计数的简单时间节省都会有所帮助)。谢谢
尝试:
>>> np.equal(A, Z).all(axis=1).sum()
3
Run Code Online (Sandbox Code Playgroud)
一步步:
>>> np.equal(A, Z)
array([[False, False, False],
[False, False, False],
[ True, True, True],
[ True, True, True],
[ True, True, True]])
>>> np.equal(A, Z).all(axis=1)
array([False, False, True, True, True])
>>> np.equal(A, Z).all(axis=1).sum()
3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
764 次 |
| 最近记录: |