我有如下的numpy数组a和b。
a.shape = (100,10000)
b.shape = (100,)
需要形状为(100,)的ac,这样,
for i in range(0,len(b)):
c[i] = a[i,b[i]]
我想要一种更快的方法来完成上述操作。我正在使用的场景不能使用For循环。它可以工作,但仍然很昂贵。有更有效的方法吗?
是的,您可以这样做:
import numpy as np
c = a[np.arange(len(b)), b]
那差不多快了。在下面的代码中
import numpy as np
a = np.random.random((1000000, 10))
b = np.random.randint(0,10,1000000)
c = a[np.arange(len(b)), b]
最后一次操作需要31毫秒(由IPython进行%timeit
),即每个索引需要31 ns。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句