如何在Python中向循环添加优化问题

2024-10-04 05:19:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个矩阵,即

第一个

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

你知道怎么改变吗


Tags: countnp矩阵arraysumprintaxisconvergence