繁体   English   中英

删除python中的嵌套循环

[英]Removing nested loops within python

我试图加快我的代码。 最大的问题是我有几个嵌套循环(它们必须迭代25000个单元格以上)。 但是,当我尝试摆脱这些嵌套循环时,会得到不同的结果,但我似乎并没有找到原因。

这是嵌套循环之一:

for i in range(N):
    for j in range(N):
        # value added in sector i (month k+1)
        VA[i,k+1]= VA[i,k+1] - IO[j,i]*(Produc[i,k+1]/Produc[i,0])

这是我摆脱内循环的方法:

for in range(N):
    VA[i,k+1]=VA[i,k+1] - np.sum(IO[:,i])*(Produc[i,k+1]/Produc[i,0])

非常感谢您的帮助。

问题在于,分配给VA会将类型限制为VA.dtype,因此如果VA.dtype的精度不如VA[i,k+1] - IO[j,i]*(Produc[i,k+1]/Produc[i,0]) -IO VA[i,k+1] - IO[j,i]*(Produc[i,k+1]/Produc[i,0])

要保持此舍入,您需要:

for i in range(N):
    # value added in sector i (month k+1)
    VA[i,k+1] -= (IO[:,i]*(Produc[i,k+1]/Produc[i,0])).astype(VA.dtype).sum()

...假设您对更准确的版本不满意!

一些更艰苦的研究表明,如果减法将数据取为0,则无法完美模拟该行为。 我不会打扰,因为模拟细微的错误是在浪费时间;)。


请注意,如果您满意

for in range(N):
    VA[i,k+1]=VA[i,k+1] - np.sum(IO[:,i])*(Produc[i,k+1]/Produc[i,0])

你也可以

VA[:,k+1] -= IO.sum(axis=0) * Produc[:,k+1] / Produc[:,0]

我认为这是等效的。


请注意,这是假设N是其中许多参数的理想选择。 可能是VA[:N, :N]是VA的子集,在这种情况下就是问题所在,您应该在计算中将所有内容都裁剪为N

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM