如何删除嵌套的循环?

tacos_life

我有以下嵌套循环:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章