如何解决python / numpy:如何tweek嵌套循环以加快代码速度
想象一个形状为N,C,K,H,W的Numpy np.array
和
meanCoeffs = np.mean(x,axis=(3,4))
的形状为N,C,K
import time
import numpy as np
def func(j1,t1,L):
return t1+j1*L
N,C,J,L,H,W = 128,5,3,8,64,64
x = np.random.rand(N,J*L,W)
meanCoeffs = np.mean(x,4))
xnew=np.zeros_like(x)
start = time.time()
for ib in range(x.shape[0]):
for filt in range(x.shape[1]):
for j1 in range(J):
for t1 in range(L):
i=func(j1,L)
xnew[ib,filt,i,:,:] = x[ib,:]-meanCoeffs[ib,i]
end = time.time()
print ("Time elapsed:",end - start)
经过的时间:0.18448996543884277
请注意,func
函数可能很复杂。
有没有办法加快这种原始代码的速度?
感谢您的帮助。
解决方法
索引中
for j1 in range(J):
for t1 in range(L):
i=t1+j1*L
相当于简单地说
for i in range(J*L):
也就是说,三个循环归结为所有三个索引的循环,减法是一个简单的广播:
xnew2 = x - meanCoeffs[:,:,None,None]
如果您愿意,也可以使用np.expand_dims(meanCoeffs,(3,4))
。
您可以验证这与您在具体示例中所做的相同:
In [14]: np.all(xnew == xnew2)
Out[14]: True
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。