我有两个矩阵,即
第一个
originalOD = np.array([[1,2,4], [3,2,3], [4,2,2]])
对于第二个,我现在只知道必须匹配的和,即
targetD=np.array([16,9,9])
targetO=np.array([14,8,12])
原始的需要与目标匹配
originalD=np.sum(originalOD,axis=0)
originalO=np.sum(originalOD,axis=1)
我已经在一个循环中成功地做到了这一点,即收敛于0.99和1.01之间,但希望确保同时收敛和(即新矩阵和目标矩阵中的总和之间的差异)最小化
count=0
while count<1000000:
print('loop', count)
count=count+1
xD=targetD/originalD
newOD=originalOD*xD
originalD=np.sum(newOD,axis=0)
originalO=np.sum(newOD,axis=1)
xO=targetO/originalO
newOD=originalOD*xO
originalO=np.sum(newOD,axis=1)
originalD=np.sum(newOD,axis=0)
originalO=np.sum(newOD,axis=1)
#match Os to Os and Ds to Ds
Convergence = ((sum(originalO)/sum(targetO))+(sum(originalD)/sum(targetD)))/2
Convergence1 = (originalO-targetO)
Convergence2 = (originalD-targetD)
Convergence3= (originalO-targetO)*(originalO-targetO)
Convergence4 = (originalD-targetD)*(originalD-targetD)
Convergence5 = sum(Convergence3)+sum(Convergence4)
SumMatch=sum(targetO)
ConvergenceSum=Convergence5/SumMatch
print('Converged:', Convergence)
print('ConvergenceSum', ConvergenceSum)
if Convergence<1.01 and Convergence>0.99:
newOD=newOD*1/Convergence
originalD=np.sum(newOD,axis=0)
originalO=np.sum(newOD,axis=1)
print('O:', sum(originalO))
print('D:',sum( originalD))
break
你知道怎么改变吗
目前没有回答
相关问题 更多 >
编程相关推荐