【发布时间】:2019-09-12 09:04:27
【问题描述】:
我有一个原始矩阵
originalOD = np.array([[1,2,4], [3,2,3], [4,2,2]])
#### Now we can sum productions and attractions####
originalD=np.sum(originalOD,axis=0)
originalO=np.sum(originalOD,axis=1)
又想有原创与原创融合:
targetD=np.array([16,9,9])
targetO=np.array([14,8,12])
我正在尝试使用一些收敛标准在循环中执行此操作:
Convergence=0
while True:
xD=targetD/originalD
newOD=originalOD*xD
newD=np.sum(newOD,axis=0)
xO=targetO/originalO
newOD=originalOD*xO
newO=np.sum(newOD,axis=1)
Convergence = (sum(newO)/sum(targetO)+sum(newD)/sum(targetD))/2
print('Converged:', Convergence)
if Convergence<1.01 and Convergence>0.99:
break
else:
continue
它正在运行,但似乎 xD 和 xO 在后续循环中没有改变,即
Converged: 1.0220588235294117
Converged: 1.0220588235294117
Converged: 1.0220588235294117
Converged: 1.0220588235294117
有什么想法可以改变代码吗?
【问题讨论】:
-
您的收敛措施没有使用您在循环中更改的任何内容。所以他们也没有改变
-
@KPLauritzen 谢谢 - 这是一个有用的评论!我现在已经修改了,但仍然无法在后续循环中更改任何内容。
-
您为此使用循环是否有原因?
-
@MadPhysicist 谢谢!是的 - 我有一个区域之间的行程矩阵(即 originalOD),我也知道往返区域的总行程必须是多少,即 targetD 和 targetO。这就是为什么我试图修改原始矩阵,以便它可以匹配目标值。
标签: python loops numpy matrix convergence