[英]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.