如何解决在数组的每个元素上执行相同操作的最快方法
我有一个尺寸为100x100x1000的数组。对于数组的每个像素,我要执行以下操作:
A = np.random.rand(100,100,1000)
values = [[0,1,2,3],[0,4,5],[3,2],[4,3,0]]
vmax = np.amax(values)
for i in range(A.shape[0]-2):
for j in range(A.shape[1]-2):
for v in values:
for t in A.shape[2] - vmax:
result[i,j] = A[i+1,j,t+v[0]] * A[i,j+1,t+v[1]] * A[i+2,t+v[2]] * A[i+1,j+2,t+v[3]]
我写代码的效率很低,只是为了清楚地表明,每个像素基本上都是4个嵌套循环。我找到的最有效的方法是通过索引和乘法:
A = np.random.rand(100,1000)
values = [[0,0]]
result = np.zeros((98,98))
for v in values:
result += A[-1:1,:-2,v[0]:-vmax+v[0]] * A[:-2,1:-1,v[1]:-vmax+v[1]] * A[-2:,v[2]:-vmax+v[2]] * A[-1:1,2:,v[3]:-vmax+v[3]]
但是,对于“值”的长组合或更大的数组“ A”,即使此方法也可能非常耗时。还有其他方法可以加快速度吗?我对多处理的知识非常有限,所以我不知道它是否会比numpy的乘法产生更快的结果。 还是由于操作总是相同,是否存在一种更有效的矢量化操作方法?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。