如何计算 numpy 二维数组中的重复元素?

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),并且我有多达数百万个数组。我正在尝试批量处理它们,因此任何生成计数的简单时间节省都会有所帮助)。谢谢

Cor*_*ien 5

尝试:

>>> 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)

  • @凯利邦迪。不,这样做没有问题,但我更喜欢链式函数 `np.equal(A, Z).all(axis=1)` 而不是 `(A == Z).all(axis=1)`。只是可读性问题(恕我直言)。来自`np.equal`的文档:*Return (x1 == x2) element-wise.* (2认同)