下面的代码给出了 a (0-11) 中的元素在数组 c 的第一行中出现了多少次。 (a==c[0])。我如何调整此代码,以便它对 c 中的所有行(而不仅仅是 c[0])执行相同的操作。本质上是一个for循环。
import numpy as np
c=(np.random.rand(2,5)*12).round()
print (c)
a=np.arange(12).reshape(12,1)
print (np.sum(a==c[0],axis=1))
结果应该如下所示,但没有 for 循环:
for n in range(2):
a=np.arange(12).reshape(12,1)
print (np.sum(a==c[n],axis=1))
如果你必须使用broadcasting这会导致大量内存使用,你可以这样做 -
(c[...,None] == np.arange(12)).sum(1)
对于更大尺寸的c
,更好的方法是不打扰c
然后四处走动np.arange(12)
,就像这样-
(c == (np.arange(12)[:,None,None])).sum(-1).T
这是一些证明theory -
In [28]: c=(np.random.rand(2000,5000)*12).round()
In [29]: %timeit (c[...,None] == np.arange(12)).sum(1)
1 loops, best of 3: 423 ms per loop
In [30]: %timeit (c == (np.arange(12)[:,None,None])).sum(-1).T
1 loops, best of 3: 232 ms per loop
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)