Python 实现简单的矩阵
发布时间:2020-12-17 17:27:05 所属栏目:Python 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 #!/usr/bin/python # -*- coding: utf-8 -*- ''''' Created on 2015-1-7 @author: beyondzhou @name: myarray.py ''' # Implementation of the Matrix
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 #!/usr/bin/python # -*- coding: utf-8 -*- ''''' Created on 2015-1-7 @author: beyondzhou @name: myarray.py ''' # Implementation of the Matrix ADT using a 2D array from myarray import Array2D class Matrix: # Creates a matrix of size numRows * numCols initialized to 0 def __init__(self,numRows,numCols): self._theGrid = Array2D(numRows,numCols) self._theGrid.clear(0) # Returns the number of rows in the matrix def numRows(self): return self._theGrid.numRows() # Returns the number of columns in the matrix def numCols(self): return self._theGrid.numCols() # Returns the value of element (i,j): x[i,j] def __getitem__(self,ndxTuple): return self._theGrid[ndxTuple[0],ndxTuple[1]] # Sets the value of element (i,j) to the value s: x[i,j] = s def __setitem__(self,ndxTuple,scalar): self._theGrid[ndxTuple[0],ndxTuple[1]] = scalar # Scales the matrix by the given scalar def scaleBy(self,scalar): for r in range(self.numRows()): for c in range(self.numCols()): self[r,c] *= scalar # Creates and returns a new matrix that is the transpose of this matrix def transpose(self): # Create the new matrix newMatrix = Matrix(self.numCols(),self.numRows()) # Add the corresponding elements in the two matrices for r in range(self.numRows()): for c in range(self.numCols()): newMatrix[c,r] = self[r,c] return newMatrix # Creates and returns a new matrix that results from matrix addition def __add__(self,rhsMatrix): assert rhsMatrix.numRows() == self.numRows() and rhsMatrix.numCols() == self.numCols(), "Matrix sizes not compatible for the add operation." # Create the new matrix newMatrix = Matrix(self.numRows(),self.numCols()) # Add the corresponding elements in the two matrices for r in range(self.numRows()): for c in range(self.numCols()): newMatrix[r,c] = self[r,c] + rhsMatrix[r,c] return newMatrix # Creates and returns a new matrix that results from matrix sub def __sub__(self,c] - rhsMatrix[r,c] return newMatrix # Creates and returns a new matrix resulting from matrix multiplcation def __mul__(self,rhsMatrix): assert rhsMatrix.numRows() == self.numCols(), "Matrix sizes not compatible for the multi operation." # Create the new matrix newMatrix = Matrix(self.numRows(),rhsMatrix.numCols()) # Mul the corresponding elements in the two matrices for r in range(self.numRows()): for c in range(rhsMatrix.numCols()): mysum = 0.0 for k in range(self.numCols()): mysum += self[r,k] * rhsMatrix[k,r] newMatrix[r,c] = mysum return newMatrix #!/usr/bin/python # -*- coding: utf-8 -*- ''''' Created on 2015-1-7 @author: beyondzhou @name: test_matrix.py ''' def test_matrix(): # Import from mymatrix import Matrix import random # set default value for matrix aMatrix = Matrix(2,3) bMatrix = Matrix(2,3) fMatrix = Matrix(3,2) for i in range(aMatrix.numRows()): for j in range(aMatrix.numCols()): aMatrix[i,j] = random.random() bMatrix[i,j] = random.random() for i in range(fMatrix.numRows()): for j in range(fMatrix.numCols()): fMatrix[i,j] = random.random() print 'The primary value of amatrix' for i in range(aMatrix.numRows()): for j in range(aMatrix.numCols()): print '%s ' % aMatrix[i,j],print 'r' print 'nThe primary value of bmatrix' for i in range(bMatrix.numRows()): for j in range(bMatrix.numCols()): print '%s ' % bMatrix[i,print 'r' print 'nThe primary value of fmatrix' for i in range(fMatrix.numRows()): for j in range(fMatrix.numCols()): print '%s ' % fMatrix[i,print 'r' # add amatrix and bmatrix to cmatrix cMatrix = aMatrix + bMatrix print 'nThe value of cMatrix (aMatrix + bMatrix)' for i in range(cMatrix.numRows()): for j in range(cMatrix.numCols()): print '%s ' % cMatrix[i,print 'r' # sub amatrix and bmatrix to dmatrix dMatrix = aMatrix - bMatrix print 'nThe value of dMatrix (aMatrix - bMatrix)' for i in range(dMatrix.numRows()): for j in range(dMatrix.numCols()): print '%s ' % dMatrix[i,print 'r' # Mul amatrix and fMatrix to ematrix eMatrix = aMatrix * fMatrix print 'nThe value of eMatrix (aMatrix * fMatrix)' for i in range(eMatrix.numRows()): for j in range(eMatrix.numCols()): print '%s ' % eMatrix[i,print 'r' # Scale the amatrix by 3 aMatrix.scaleBy(3) print 'nThe scale value of amatrix' for i in range(aMatrix.numRows()): for j in range(aMatrix.numCols()): print '%s ' % aMatrix[i,print 'r' # Transpose the amatrix dMatrix = aMatrix.transpose() print 'nThe transpose value of amatrix' for i in range(dMatrix.numRows()): for j in range(dMatrix.numCols()): print '%s ' % dMatrix[i,print 'r' if __name__ == "__main__": test_matrix() The primary value of amatrix 0.886197406941 0.304295996721 0.293469382347 0.154702139448 0.511075267985 0.387057640727 The primary value of bmatrix 0.574674206609 0.364815615899 0.493367650314 0.438101377839 0.801271107474 0.0891226289712 The primary value of fmatrix 0.00716087704081 0.537519043084 0.451888654276 0.234306298527 0.572987747957 0.479059183861 The value of cMatrix (aMatrix + bMatrix) 1.46087161355 0.66911161262 0.78683703266 0.592803517287 1.31234637546 0.476180269699 The value of dMatrix (aMatrix - bMatrix) 0.311523200332 -0.0605196191784 -0.199898267967 -0.283399238391 -0.290195839489 0.297935011756 The value of eMatrix (aMatrix * fMatrix) 0.31200821961 0.31200821961 0.388327017743 0.388327017743 The scale value of amatrix 2.65859222082 0.912887990162 0.88040814704 0.464106418343 1.53322580395 1.16117292218 The transpose value of amatrix 2.65859222082 0.464106418343 0.912887990162 1.53322580395 0.88040814704 1.16117292218 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |