在我的机器上,这更快:
(a == b).sum()
如果您不想使用任何额外的存储空间,我建议您使用 numba。我不太熟悉它,但这似乎运作良好。我在让 Cython 获取布尔 NumPy 数组时遇到了一些麻烦。
from numba import autojit
def pysumeq(a, b):
tot = 0
for i in xrange(a.shape[0]):
for j in xrange(a.shape[1]):
if a[i,j] == b[i,j]:
tot += 1
return tot
# make numba version
nbsumeq = autojit(pysumeq)
A = (rand(10,10)<.5)
B = (rand(10,10)<.5)
# do a simple dry run to get it to compile
# for this specific use case
nbsumeq(A, B)
如果您没有 numba,我建议您使用@user2357112 的答案
编辑:刚刚有一个 Cython 版本工作,这里是.pyx
文件。我会和这个一起去的。
from numpy cimport ndarray as ar
cimport numpy as np
cimport cython
@cython.boundscheck(False)
@cython.wraparound(False)
def cysumeq(ar[np.uint8_t,ndim=2,cast=True] a, ar[np.uint8_t,ndim=2,cast=True] b):
cdef int i, j, h=a.shape[0], w=a.shape[1], tot=0
for i in xrange(h):
for j in xrange(w):
if a[i,j] == b[i,j]:
tot += 1
return tot