我有以下嵌套循环:
sum_tot = 0.0
for i in range(len(N)-1):
for j in range(len(N)-1):
sum_tot = sum_tot + N[i]**2*N[j]**2*W[i]*W[j]*x_i[j][-1] / (N[j]**2 - x0**2) *(z_i[i][j] - z_j[i][j])*x_j[i][-1] / (N[i]**2 - x0**2)
它基本上是一个具有双重求和的数学函数。每个和达到N的长度。我一直在尝试找出是否有一种方法可以在不使用嵌套的for循环的情况下编写此代码,以减少计算时间。我尝试使用列表理解,但是计算时间相似(如果不同)。有没有一种方法可以将此表达式编写为矩阵来避免循环?
要将其转换为矩阵计算,我建议先合并一些术语。
如果这些对象不是numpy数组,则最好将它们转换为numpy数组,因为它们支持逐元素操作。
要转换,只需做
import numpy
N = numpy.array(N)
w = numpy.array(w)
x_i = numpy.array(x_i)
x_j = numpy.array(x_j)
z_i = numpy.array(z_i)
z_j = numpy.array(z_j)
然后,
common_terms = N**2*w/(N**2-x0**2)
i_terms = common_terms*x_j[:,-1]
j_terms = common_terms*x_i[:,-1]
i_j_matrix = z_i - z_j
sum_output = (i_terms.reshape((1,-1)) @ i_j_matrix @ j_terms.reshape((-1,1)))[0,0]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句