前言:一上學好多亂七八糟的事,志願活動呀,社會實踐呀,參加也後悔,不參加也後悔,有了更好的朋友就可以踩著原來的朋友向上嗎?【空】。之前矩陣覺得這個挺好的,那麼就看看如何進行直接計算吧,這樣的話,要是有題的話我就有矩陣計算器了呢。。。
矩陣加法相比大家都知道的,就那樣,話不多說,來吧老鐵
# 矩陣相加
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 ...