Python 实现简单的矩阵
发布时间:2020-05-24 23:32:34 所属栏目:Python 来源:互联网
导读:Python 实现简单的矩阵
|
下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。 脚本之家小编现在分享给大家,也给大家做个参考。 #!/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
以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。 如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
