我们从Python开源项目中,提取了以下41个代码示例,用于说明如何使用numpy.linalg.multi_dot()。
def orthoFock(self): """Routine to orthogonalize the AO Fock matrix to orthonormal basis""" self.FO = np.dot(self.X.T,np.dot(self.F,self.X))
def unOrthoFock(self): """Routine to unorthogonalize the orthonormal Fock matrix to AO basis""" self.F = np.dot(self.U.T,np.dot(self.FO,self.U))
def orthoDen(self): """Routine to orthogonalize the AO Density matrix to orthonormal basis""" self.PO = np.dot(self.U,np.dot(self.P,self.U.T))
def unOrthoDen(self): """Routine to unorthogonalize the orthonormal Density matrix to AO basis""" self.P = np.dot(self.X,np.dot(self.PO,self.X.T))
def computeDipole(self): """Routine to compute the SCF electronic dipole moment""" self.el_energy = np.einsum('pq,qp',self.Core+self.F,self.P) for i in range(3): self.mu[i] = -2*np.trace(np.dot(self.P,self.M[i])) + sum([atom.charge*(atom.origin[i]-self.center_of_charge[i]) for atom in self.atoms]) # to debye self.mu *= 2.541765
def updateDIIS(self,F,P): FPS = dot([F,P,self.S]) SPF = self.adj(FPS) # error must be in orthonormal basis error = dot([self.X,FPS-SPF,self.X]) self.fockSet.append(self.F) self.errorSet.append(error) numFock = len(self.fockSet) # limit subspace, hardcoded for now if numFock > 8: del self.fockSet[0] del self.errorSet[0] numFock -= 1 B = np.zeros((numFock + 1,numFock + 1)) B[-1,:] = B[:,-1] = -1.0 B[-1,-1] = 0.0 # B is symmetric for i in range(numFock): for j in range(i+1): B[i,j] = B[j,i] = \ np.real(np.trace(np.dot(self.adj(self.errorSet[i]), self.errorSet[j]))) residual = np.zeros(numFock + 1) residual[-1] = -1.0 weights = np.linalg.solve(B,residual) # weights is 1 x numFock + 1, but first numFock values # should sum to one if we are doing DIIS correctly assert np.isclose(sum(weights[:-1]),1.0) F = np.zeros((self.nbasis,self.nbasis),dtype='complex') for i, Fock in enumerate(self.fockSet): F += weights[i] * Fock return F
def test_basic_function_with_three_arguments(self): # multi_dot with three arguments uses a fast hand coded algorithm to # determine the optimal order. Therefore test it separately. A = np.random.random((6, 2)) B = np.random.random((2, 6)) C = np.random.random((6, 2)) assert_almost_equal(multi_dot([A, B, C]), A.dot(B).dot(C)) assert_almost_equal(multi_dot([A, B, C]), np.dot(A, np.dot(B, C)))
def test_basic_function_with_dynamic_programing_optimization(self): # multi_dot with four or more arguments uses the dynamic programing # optimization and therefore deserve a separate A = np.random.random((6, 2)) B = np.random.random((2, 6)) C = np.random.random((6, 2)) D = np.random.random((2, 1)) assert_almost_equal(multi_dot([A, B, C, D]), A.dot(B).dot(C).dot(D))
def test_vector_as_first_argument(self): # The first argument can be 1-D A1d = np.random.random(2) # 1-D B = np.random.random((2, 6)) C = np.random.random((6, 2)) D = np.random.random((2, 2)) # the result should be 1-D assert_equal(multi_dot([A1d, B, C, D]).shape, (2,))
def test_vector_as_last_argument(self): # The last argument can be 1-D A = np.random.random((6, 2)) B = np.random.random((2, 6)) C = np.random.random((6, 2)) D1d = np.random.random(2) # 1-D # the result should be 1-D assert_equal(multi_dot([A, B, C, D1d]).shape, (6,))
def test_vector_as_first_and_last_argument(self): # The first and last arguments can be 1-D A1d = np.random.random(2) # 1-D B = np.random.random((2, 6)) C = np.random.random((6, 2)) D1d = np.random.random(2) # 1-D # the result should be a scalar assert_equal(multi_dot([A1d, B, C, D1d]).shape, ())