이 글은 Python으로 구현된 행렬 클래스를 주로 소개하고, Python 행렬의 정의, 계산, 변환 및 기타 관련 연산 기술을 완전한 예제 형식으로 분석합니다. 필요한 친구가 참고할 수 있습니다.
이 글의 예제는 설명합니다. Python으로 구현된 행렬 클래스. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.
과학적 계산은 행렬 연산과 분리될 수 없습니다. 물론 Python에는 이미 아주 좋은 기성 라이브러리가 있습니다. numpy(간단한 numpy 설치 및 사용
나는 이 매트릭스 클래스를 썼고 바퀴를 재발명하려는 의도가 아니라 단지 연습 차원에서 여기에 기록했습니다.
참고: 이 클래스의 모든 기능이 아직 구현되지는 않았으며 천천히 개선될 예정입니다.
전체 코드:
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] # 设置元素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 __p__(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,则向下交换最近的当前列元素非零的行 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): '''转置''' 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): '''代数余子式(用于行列式展开)''' assert self.row == self.column, "不是方阵,无法计算代数余子式" assert self.row >= 3, "至少是3*3阶方阵" assert row <= self.row and column <= self.column, "下标超出范围" 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()).
위 내용은 Python이 행렬 클래스를 구현하는 방법에 대한 자세한 코드 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

Python은 웹 개발, 데이터 과학, 기계 학습, 자동화 및 스크립팅 분야에서 널리 사용됩니다. 1) 웹 개발에서 Django 및 Flask 프레임 워크는 개발 프로세스를 단순화합니다. 2) 데이터 과학 및 기계 학습 분야에서 Numpy, Pandas, Scikit-Learn 및 Tensorflow 라이브러리는 강력한 지원을 제공합니다. 3) 자동화 및 스크립팅 측면에서 Python은 자동화 된 테스트 및 시스템 관리와 같은 작업에 적합합니다.

2 시간 이내에 파이썬의 기본 사항을 배울 수 있습니다. 1. 변수 및 데이터 유형을 배우십시오. 이를 통해 간단한 파이썬 프로그램 작성을 시작하는 데 도움이됩니다.

10 시간 이내에 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법은 무엇입니까? 컴퓨터 초보자에게 프로그래밍 지식을 가르치는 데 10 시간 밖에 걸리지 않는다면 무엇을 가르치기로 선택 하시겠습니까?

Fiddlerevery Where를 사용할 때 Man-in-the-Middle Reading에 Fiddlereverywhere를 사용할 때 감지되는 방법 ...

Python 3.6에 피클 파일로드 3.6 환경 보고서 오류 : modulenotfounderror : nomodulename ...

경치 좋은 스팟 댓글 분석에서 Jieba Word 세분화 문제를 해결하는 방법은 무엇입니까? 경치가 좋은 스팟 댓글 및 분석을 수행 할 때 종종 Jieba Word 세분화 도구를 사용하여 텍스트를 처리합니다 ...

정규 표현식을 사용하여 첫 번째 닫힌 태그와 정지와 일치하는 방법은 무엇입니까? HTML 또는 기타 마크 업 언어를 다룰 때는 정규 표현식이 종종 필요합니다.

Investing.com의 크롤링 전략 이해 많은 사람들이 종종 Investing.com (https://cn.investing.com/news/latest-news)에서 뉴스 데이터를 크롤링하려고합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

드림위버 CS6
시각적 웹 개발 도구

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

뜨거운 주제



