【发布时间】:2017-09-28 10:38:50
【问题描述】:
我有一个 3d 数据,想计算距原点所有可能距离的数据点乘积的平均值。我有一个巨大的网格 (128^3-1024^3),而我现在正在做的事情并没有在几个小时内给出答案。
# u read from a file
import numpy as np
for icx in range(0,128):
for icy in range(0,128):
for icz in range(0,128):
cukin[icx,icy,icz] = np.mean((u*np.roll(np.roll(np.roll(u,icx, axis=0),icy, axis=1),icz, axis=2))
有没有办法避免这个问题出现循环?
玩具示例:
cukin = np.zeros((2,2,2))
u = np.mgrid[1:5:1,1:5:1,1:5:1]
for icx in range(0,2):
for icy in range(0,2):
for icz in range(0,2):
cukin[icx,icy,icz] = np.mean((u*np.roll(np.roll(np.roll(u,icx, axis=0),icy, axis=1),icz, axis=2)))
给cukin
[[[ 7.5 7. ]
[ 7. 6.5 ]]
[[ 6.25 6.25]
[ 6.25 6.25]]]
【问题讨论】:
-
可以简化roll命令:
np.roll(a, (i,j,k))有效。 -
@VBB 仍然无法避免循环。遍历循环是耗时的部分。
-
制作一个包含输入数据的程序的玩具版本,以便我们可以运行它。
-
@JohnZwinck 按照您的建议使用玩具版本更新问题。
标签: python python-2.7 loops numpy for-loop