矩陣運算的python實現

2021-10-09 14:51:22 字數 4612 閱讀 4889

前言:一上學好多亂七八糟的事,志願活動呀,社會實踐呀,參加也後悔,不參加也後悔,有了更好的朋友就可以踩著原來的朋友向上嗎?【空】。之前矩陣覺得這個挺好的,那麼就看看如何進行直接計算吧,這樣的話,要是有題的話我就有矩陣計算器了呢。。。

矩陣加法相比大家都知道的,就那樣,話不多說,來吧老鐵

# 矩陣相加

a =[[1

,3,5

],[7

,9,11

],[13

,15,17

]]b =[[9

,8,7

],[6

,5,4

],[3

,2,1

]]# 這裡可以用input形式的輸入 很簡單 迴圈一下就好 but我沒多寫

n =3

c =[

[none

]*n for i in

range

(n)]

# for row in range(n) 表示可將前者進行重複 列表簡潔表達

for i in

range(3

):for j in

range(3

):c[i]

[j]= a[i]

[j]+ b[i]

[j]# 矩陣加法

for i in

range(3

):for j in

range(3

):# print('%d'%c[i][j],end='\t')

# print('\n')

print

('{}\t'

.format

(c[i]

[j])

,end='')

print

('\n'

)#兩種形式都可以 之後做好了 還可以打包做個美觀的介面

矩陣之所以有點不好算,部分原因可能就是因為乘法,這裡我參考清華大學mooc沒有用到上面的二維列表,如下所示,理論上任意多行都能算,也不知道為什麼市面上的計算器為什麼都是有限制的

def

matrixmultiply

(arra,arrb,arrc,m,n,p)

:# m * n n * p == m*p

if m<=

0or n<=

0or p<=0:

print

('!錯:m,n,p必須均大於0'

)return

for i in

range

(m):

# 確定首行所乘的東西

for j in

range

(p):

pos =

0for k in

range

(n):

# 確定列 使得所有列均相加

pos +=

int(arra[i*n+k])*

int(arrb[k*p+j]

)# k 可以最後加入

arrc[i*p+j]

= pos

# 以下用來製作一維列**式的腦中假想二維資料

m,n =

map(

int,

(input

('請輸入矩陣a的維數用逗號分割m,n:'

).split(

',')))

a =[

none

]*m*n

print

('下面請輸入a中各元素'

)for i in

range

(m):

for j in

range

(n):

origin =

input

('a{}{}='

.format

(i,j)

) flag =

0try:if

type

(eval

(origin))==

intor

type

(eval

(origin))==

float

: flag =

1except

: flag =

0while flag==0:

origin =

input

('a{}{}='

.format

(i,j)

)try:if

type

(eval

(origin))==

intor

type

(eval

(origin))==

float

: flag =

1except

: flag =

0 a[i*n+j]

= origin

# 這裡肯定有簡單的** 我暫時腦子短路沒想到

# ctrl+c/v 乙個b

n,p =

map(

int,

(input

('請輸入矩陣b的維數用逗號分割n,p:'

).split(

',')))

b =[

none

]*p*n

print

('下面請輸入b中各元素'

)for i in

range

(n):

for j in

range

(p):

originb =

input

('b{}{}='

.format

(i, j)

) flag =

0try:if

type

(eval

(originb))==

intor

type

(eval

(originb))==

float

: flag =

1except

: flag =

0while flag ==0:

originb =

input

('b{}{}='

.format

(i, j)

)try:if

type

(eval

(originb))==

intor

type

(eval

(originb))==

float

: flag =

1except

: flag =

0 b[i * p + j]

= originb

# 這裡卡了好久。。。

# 宣告結果c

c =[

none

]*m*p

matrixmultiply(a,b,c,m,n,p)

print

('[axb的結果是]'

)for i in

range

(m):

for j in

range

(p):

print

('{}'

.format

(c[i*p+j]

),end=

'\t'

)print

('\n'

)

後來在原型上改了好幾次,增加了使用者體驗,手殘黨(比如我)直誇好,這裡可以全部用函式,但對於只有兩個矩陣計算的題似乎打那麼多函式比較沒意思,就直接列舉了

眾所周知,這很簡單

# 輸入矩陣方法可以參考乘法,也可以參考下面面的

# arr =

# r,c = map(int,input('請輸入矩陣的行和列逗號分割:').split(','))

# for i in range(r):

# print(arr)

arra =[[

1,2,

3],[

4,5,

6],[

7,8,

9]]n =

3arrb =[[

none

]*n for i in

range

(n)]

for i in

range

(n):

for j in

range

(n):

arrb[j]

[i]= arra[i]

[j]for i in

range

(n):

for j in

range

(n):

print

('{}'

.format

(arrb[i]

[j])

,end=

'\t'

)print()

# 這是我最近才發現的 可以直接print然後自動換行 妙++

對於0比較多的矩陣比如稀疏矩陣,三角矩陣可以用一維陣列來表示二維陣列 有空寫一寫

矩陣求逆運算 Python實現

原理 應用列主元消去法運算矩陣a的逆矩陣,利用初等矩陣行變換a轉化單位矩陣時,同樣的行變化可將單位矩陣轉化為a的逆矩陣。步驟 編制下三角部分消元和上三角部分消元的 a.從對角線元素往下比較取得這一列的最大值所在的行,與對角線元素所在行進行交換。b.從對角線所在行往下,利用矩陣的行變換將這一列下所有元...

python矩陣運算

python的numpy庫提供矩陣運算的功能,因此我們在需要矩陣運算的時候,需要匯入numpy的包。from numpy import 匯入numpy的庫函式 import numpy as np 這個方式使用numpy的函式時,需要以np.開頭。由一維或二維資料建立矩陣 from numpy im...

python中的矩陣運算

numpy scipy sympy 搬運 python矩陣的運算大全 python矩陣運算可以用numpy模組,也可以用scipy模組,主要運算包括以下幾種 import numpy as np import matplotlib.pyplot as plt import scipy.linalg ...