最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實現(xiàn)的矩陣類實例

 更新時間:2017年08月22日 11:27:03   作者:羅兵  
這篇文章主要介紹了Python實現(xiàn)的矩陣類,結(jié)合完整實例形式分析了Python矩陣的定義、計算、轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下

本文實例講述了Python實現(xiàn)的矩陣類。分享給大家供大家參考,具體如下:

科學(xué)計算離不開矩陣的運算。當(dāng)然,python已經(jīng)有非常好的現(xiàn)成的庫:numpy(numpy的簡單安裝與使用可參考http://www.fzitv.net/article/66236.htm)

我寫這個矩陣類,并不是打算重新造一個輪子,只是作為一個練習(xí),記錄在此。

注:這個類的函數(shù)還沒全部實現(xiàn),慢慢在完善吧。

全部代碼:

import copy
class Matrix:
  '''矩陣類'''
  def __init__(self, row, column, fill=0.0):
    self.shape = (row, column)
    self.row = row
    self.column = column
    self._matrix = [[fill]*column for i in range(row)]
  # 返回元素m(i, j)的值: m[i, j]
  def __getitem__(self, index):
    if isinstance(index, int):
      return self._matrix[index-1]
    elif isinstance(index, tuple):
      return self._matrix[index[0]-1][index[1]-1]
  # 設(shè)置元素m(i,j)的值為s: m[i, j] = s
  def __setitem__(self, index, value):
    if isinstance(index, int):
      self._matrix[index-1] = copy.deepcopy(value)
    elif isinstance(index, tuple):
      self._matrix[index[0]-1][index[1]-1] = value
  def __eq__(self, N):
    '''相等'''
    # A == B
    assert isinstance(N, Matrix), "類型不匹配,不能比較"
    return N.shape == self.shape # 比較維度,可以修改為別的
  def __add__(self, N):
    '''加法'''
    # A + B
    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):
    '''減法'''
    # A - B
    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):
    '''乘法'''
    # A * B (或:A * 2.0)
    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, r]
          M[r, c] = sum
    return M
  def __div__(self, N):
    '''除法'''
    # A / B
    pass
  def __pow__(self, k):
    '''乘方'''
    # A**k
    assert self.row == self.column, "不是方陣,不能乘方"
    M = copy.deepcopy(self)
    for i in range(k):
      M = M * self
    return M
  def rank(self):
    '''矩陣的秩'''
    pass
  def trace(self):
    '''矩陣的跡'''
    pass
  def adjoint(self):
    '''伴隨矩陣'''
    pass
  def invert(self):
    '''逆矩陣'''
    assert self.row == self.column, "不是方陣"
    M = Matrix(self.row, self.column*2)
    I = self.identity() # 單位矩陣
    I.show()#############################
    # 拼接
    for r in range(1,M.row+1):
      temp = self[r]
      temp.extend(I[r])
      M[r] = copy.deepcopy(temp)
    M.show()#############################
    # 初等行變換
    for r in range(1, M.row+1):
      # 本行首元素(M[r, r])若為 0,則向下交換最近的當(dāng)前列元素非零的行
      if M[r, r] == 0:
        for rr in range(r+1, M.row+1):
          if M[rr, r] != 0:
            M[r],M[rr] = M[rr],M[r] # 交換兩行
          break
      assert M[r, r] != 0, '矩陣不可逆'
      # 本行首元素(M[r, r])化為 1
      temp = M[r,r] # 緩存
      for c in range(r, M.column+1):
        M[r, c] /= temp
        print("M[{0}, {1}] /= {2}".format(r,c,temp))
      M.show()
      # 本列上、下方的所有元素化為 0
      for rr in range(1, M.row+1):
        temp = M[rr, r] # 緩存
        for c in range(r, M.column+1):
          if rr == r:
            continue
          M[rr, c] -= temp * M[r, c]
          print("M[{0}, {1}] -= {2} * M[{3}, {1}]".format(rr, c, temp,r))
        M.show()
    # 截取逆矩陣
    N = Matrix(self.row,self.column)
    for r in range(1,self.row+1):
      N[r] = M[r][self.row:]
    return N
  def jieti(self):
    '''行簡化階梯矩陣'''
    pass
  def transpose(self):
    '''轉(zhuǎn)置'''
    M = Matrix(self.column, self.row)
    for r in range(self.column):
      for c in range(self.row):
        M[r, c] = self[c, r]
    return M
  def cofactor(self, row, column):
    '''代數(shù)余子式(用于行列式展開)'''
    assert self.row == self.column, "不是方陣,無法計算代數(shù)余子式"
    assert self.row >= 3, "至少是3*3階方陣"
    assert row <= self.row and column <= self.column, "下標(biāo)超出范圍"
    M = Matrix(self.column-1, self.row-1)
    for r in range(self.row):
      if r == row:
        continue
      for c in range(self.column):
        if c == column:
          continue
        rr = r-1 if r > row else r
        cc = c-1 if c > column else c
        M[rr, cc] = self[r, c]
    return M
  def det(self):
    '''計算行列式(determinant)'''
    assert self.row == self.column,"非行列式,不能計算"
    if self.shape == (2,2):
      return self[1,1]*self[2,2]-self[1,2]*self[2,1]
    else:
      sum = 0.0
      for c in range(self.column+1):
        sum += (-1)**(c+1)*self[1,c]*self.cofactor(1,c).det()
      return sum
  def zeros(self):
    '''全零矩陣'''
    M = Matrix(self.column, self.row, fill=0.0)
    return M
  def ones(self):
    '''全1矩陣'''
    M = Matrix(self.column, self.row, fill=1.0)
    return M
  def identity(self):
    '''單位矩陣'''
    assert self.row == self.column, "非n*n矩陣,無單位矩陣"
    M = Matrix(self.column, self.row)
    for r in range(self.row):
      for c in range(self.column):
        M[r, c] = 1.0 if r == c else 0.0
    return M
  def show(self):
    '''打印矩陣'''
    for r in range(self.row):
      for c in range(self.column):
        print(self[r+1, c+1],end=' ')
      print()
if __name__ == '__main__':
  m = Matrix(3,3,fill=2.0)
  n = Matrix(3,3,fill=3.5)
  m[1] = [1.,1.,2.]
  m[2] = [1.,2.,1.]
  m[3] = [2.,1.,1.]
  p = m * n
  q = m*2.1
  r = m**3
  #r.show()
  #q.show()
  #print(p[1,1])
  #r = m.invert()
  #s = r*m
  print()
  m.show()
  print()
  #r.show()
  print()
  #s.show()
  print()
  print(m.det())

更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python數(shù)學(xué)運算技巧總結(jié)》、《Python正則表達(dá)式用法總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進階經(jīng)典教程

希望本文所述對大家Python程序設(shè)計有所幫助。

相關(guān)文章

  • 如何在C++中調(diào)用Python

    如何在C++中調(diào)用Python

    雖然現(xiàn)在Python編程語言十分的火爆,但是實際上非要用一門語言去完成所有的任務(wù),并不是說不可以,而是不合適。在一些特定的、對于性能要求比較高的場景,還是需要用到傳統(tǒng)的C++來進行編程的。本文將用C++的代碼去調(diào)用Python函數(shù)中實現(xiàn)的一些功能
    2021-05-05
  • 向量化操作改進數(shù)據(jù)分析工作流的Pandas?Numpy示例分析

    向量化操作改進數(shù)據(jù)分析工作流的Pandas?Numpy示例分析

    這篇文章主要介紹了向量化操作改進數(shù)據(jù)分析工作流的Pandas?Numpy示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • Python基礎(chǔ)之文件操作及光標(biāo)移動詳解

    Python基礎(chǔ)之文件操作及光標(biāo)移動詳解

    這篇文章主要為大家介紹了Python基礎(chǔ)之文件操作及光標(biāo)移動詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • 使用Python創(chuàng)建自助搶單插件的完整步驟

    使用Python創(chuàng)建自助搶單插件的完整步驟

    文章介紹了如何使用Python編寫一個自助搶單插件,該插件可以幫助用戶監(jiān)控特定網(wǎng)站上的商品信息,并在條件滿足時自動下單,文章涵蓋了從項目概述、技術(shù)架構(gòu)、項目流程到環(huán)境準(zhǔn)備、網(wǎng)絡(luò)請求、數(shù)據(jù)解析、用戶界面設(shè)計和定時任務(wù)的詳細(xì)步驟
    2024-11-11
  • python中adb有什么功能

    python中adb有什么功能

    在本篇文章里小編給大家分享的是關(guān)于python中adb有功能的知識點總結(jié),有需要的可以跟著學(xué)習(xí)下。
    2020-06-06
  • Python實現(xiàn)矩陣運算的方法代碼實例

    Python實現(xiàn)矩陣運算的方法代碼實例

    這篇文章主要介紹了Python實現(xiàn)矩陣運算的方法代碼實例,想用python實現(xiàn)一個矩陣類,它可以像matlab或者numpy中的矩陣一樣進行運算,生成一個矩陣類Matrix之后,他接收一個二維列表作為輸入,然后將對應(yīng)的值寫到矩陣對應(yīng)的位置,需要的朋友可以參考下
    2023-08-08
  • python中將字典改造為對象的方法

    python中將字典改造為對象的方法

    這篇文章主要介紹了python中將字典改造為對象的方法,在實際項目中,當(dāng)使用json模塊加載一個深度很深的字典類型的json文件時,使用字典的訪問方式,將會出現(xiàn)很多中括號,即不直觀也不美觀,可以將這個字典轉(zhuǎn)化為對象,使得可以用.的方式訪問,需要的朋友可以參考下
    2023-11-11
  • python如何實現(xiàn)DES加密

    python如何實現(xiàn)DES加密

    這篇文章主要介紹了python如何實現(xiàn)DES加密,幫助大家更好的理解和學(xué)習(xí)密碼學(xué),感興趣的朋友可以了解下
    2020-09-09
  • Windows系統(tǒng)下PhantomJS的安裝和基本用法

    Windows系統(tǒng)下PhantomJS的安裝和基本用法

    今天小編就為大家分享一篇關(guān)于Windows系統(tǒng)下PhantomJS的安裝和基本用法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • Python 按比例獲取樣本數(shù)據(jù)或執(zhí)行任務(wù)的實現(xiàn)代碼

    Python 按比例獲取樣本數(shù)據(jù)或執(zhí)行任務(wù)的實現(xiàn)代碼

    這篇文章主要介紹了Python 按比例獲取樣本數(shù)據(jù)或執(zhí)行任務(wù),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12

最新評論

科技| 双江| 乌兰县| 开江县| 洪雅县| 苗栗县| 光山县| 景德镇市| 舞钢市| 高要市| 定结县| 麻江县| 赤水市| 即墨市| 长春市| 渭源县| 玉溪市| 嘉善县| 延安市| 赣州市| 砀山县| 铜川市| 象山县| 福海县| 罗田县| 普定县| 平遥县| 博爱县| 绥江县| 新乐市| 大埔县| 司法| 嘉祥县| 冀州市| 卫辉市| 德阳市| 鲜城| 潼南县| 姚安县| 吉木萨尔县| 兴隆县|