import copy
class matrix:
'''matrix class'''
def __init__(self, row, column, fill =0):
self.shape = (row, column)
self.row = row
self.column = column
if isinstance(fill,float) or isinstance(fill,int):
self._matrix = [[fill]*column for i in range(row)]
elif isinstance(fill,list):
self._matrix = fill
# 返回元素m(i,j)的值:m[i,j]
def __getitem__(self,index):
if isinstance(index,int):
return self._matrix[index]
elif isinstance(index,tuple):
return self._matrix[index[0]][index[1]]
#設定元素m(i,j)的值為s:m[i,j] = s
def __setitem__(self,index,value):
if isinstance(index,int):
self._matrix[index] = copy.deepcopy(value)
elif isinstance(index,tuple):
self._matrix[index[0]][index[1]] = value
def __eq__(self,n):
assert isinstance(n,matrix), "型別不匹配,不能比較"
return n.shape == self.shape
def __add__(self,n):
assert n.shape == self.shape, "維度不匹配,不能相加"
m = matrix(self.row,self.column)
for r in range(self.row):
for c in range(self.column):
m[r,c] = self[r,c]+n[r,c]
return m
def __sub__(self,n):
assert n.shape == self.shape, "維度不匹配,不能相減"
m = matrix(self.row,self.column)
for r in range(self.row):
for c in range(self.column):
m[r,c] = self[r,c]-n[r,c]
return m
def __mul__(self,n):
if isinstance(n,int) or isinstance(n,float):
m = matrix(self.row,self.column)
for r in range(self.row):
for c in range(self.column):
m[r,c] = self[r,c]*n
else:
assert n.row == self.column, "維度不匹配,不能相乘"
m = matrix(self.row,n.column)
for r in range(self.row):
for c in range(n.column):
sum = 0
for k in range(self.column):
sum +=self[r,k]*n[k,c]
m[r,c] = sum
return m
def __pow__(self,k):
assert self.row == self.column,"不是方陣,不能乘方"
m = copy.deepcopy(self)
for i in range(k):
m = m*self
return m
#矩陣轉置
def transpose(self):
m = matrix(self.column,self.row)
for r in range(self.row):
for c in range(self.column):
m[c,r] = self[r,c]
return m
#逆矩陣
def invert(self):
assert self.row == self.column,"不是方陣"
m = matrix(self.row,self.column*2)
i = identity(self.row)
#i.show()
#原有矩陣拼接乙個單位矩陣
for r in range(m.row):
temp = self[r]
temp.extend(i[r])
m[r] = copy.deepcopy(temp)
# m.show()
#初等行變換
for r in range(m.row):
# 本行首元素(m[r, r])若為 0,則向下交換最近的當前列元素非零的行
if m[r,r] == 0:
for rr in range(r+1,m.row):
if m[rr,r] != 0:
m[r],m[rr] = m[rr],m[r] #交換兩行
break
assert m[r,r] != 0,"矩陣不可逆"
# 本行首元素化為1
temp = m[r,r]
for c in range(r,m.column):
m[r,c] /=temp
# m.show()
# 本列上、下方所有元素的處理
for rr in range(m.row):
temp = m[rr,r]
for c in range(m.column):
if rr == r:
continue
m[rr,c] -=temp*m[r,c]
# m.show()
#擷取逆矩陣
n = matrix(self.row,self.column)
for r in range(self.row):
n[r] = m[r][self.row:]
return n
def show(self):
for r in range(self.row):
for c in range(self.column):
print self[r,c] + ' '
print ''
#生成單位矩陣
def identity(num):
m = matrix(num,num)
for r in range(num):
for c in range(num):
m[r,c] = 1 if r==c else 0
return m
#將陣列轉換為矩陣
def mat(arr):
assert isinstance(arr,list),"引數不是陣列,不能轉換"
if isinstance(arr[0],list):
row = len(arr)
column = len(arr[0])
return matrix(row,column,arr)
else:
row = 1
column = len(arr)
m = matrix(row,column,0)
for r in range(m.row):
for c in range(m.column):
m[r,c] = arr[c]
return m
#計算矩陣的行列式(m為二維陣列)
def det(m):
if len(m) <= 0:
return none
elif len(m) == 1:
return m[0][0]
else:
s = 0
for i in range(len(m)):
# 這裡生成余子式
n = [[row[a] for a in range(len(m)) if a != i] for row in m[1:]]
s += m[0][i] * det(n) * (-1) ** (i % 2)
return s
python2 7換行 Python2 7基礎語法
1.建立檔案xx.py usr bin python3 print hello,world 2.linux下執行 python hello.py 3.編碼 預設字串unicode 設定編碼 coding utf 8 4.識別符號 第乙個字元必須是字母表中字母或下劃線 識別符號的其他的部分有字母 數字...
python2 7是什麼 python2 7是什麼
pyton2.7是python在2010年發布的乙個版本。python 是乙個高層次的結合了解釋性 編譯性 互動性和物件導向的指令碼語言,具有很強的可讀性,相比其他語言經常使用英文關鍵字,其他語言的一些標點符號,它具有比其他語言更有特色語法結構。下面來解釋一下python這門語言 python是一種...
python2 7中文編碼 python2 7
我從外部api中獲得了乙個字串 u4ece u8d77 u70b9 u5411 u6b63 u5357 u65b9 u5411 u51fa u53d1,u884c u9a76170 u7c73,u76f4 u884c u8fdb u5165 u4e2d u5173 u6751 u4e1c u8def...