【发布时间】:2020-07-16 02:01:54
【问题描述】:
我有以下五个数组:
t = np.linspace(0,100,100)
Q = t**2
x = np.linspace(10,20,20)
y = np.linspace(5,8,5)
z = np.linspace(100,125,10)
我还定义了一个函数如下:
def f(t, x, y, z):
return (1+x)**3.2 * y**x * np.cos(y**x)*(t-z)
现在对于x 的每个第 i 个元素、y 的第 j 个元素和 z 的第 k 个元素,我想确定 f(t, x, y, z) 在所有 @ 的值上的值987654327@。
我还想用Q 数组对这些结果中的每一个进行“内积”。
所以我最终想要的是一个 3 维矩阵,它存储大小为len(t) 的数组,该矩阵的每个元素 (i,j,k) 等于np.sum( Q * f(t, x[i], y[j], z[k]))。
所有这些都可以通过如下的 for 循环来实现:
result = np.zeros(len(x)*len(y)*len(z)).reshape((len(x),len(y), len(z)))
for i in range(len(x)):
for j in range(len(y)):
for k in range(len(z)):
intermediate_result = f(t, x[i], y[j], z[k]) #This is an array of length len(t)
result[i][j][k] = (np.nansum(intermediate_result * Q))**2
问题是这些 for 循环在计算超出这个简化示例的更大数组 x、y 和 z 时非常耗时,因此我正在寻找一种减少计算时间的方法。 有没有有效的方法来做到这一点?
【问题讨论】:
-
看`p.xi_(x,y,z)`
-
你的意思是 np.ix_(x,y,z) 吗?你能向我解释一下在这种情况下它是如何工作的吗?这对我来说似乎不是很明显。
标签: python numpy for-loop optimization numpy-ndarray