Python 基礎(chǔ)教程

Python 流程控制

Python 函數(shù)

Python 數(shù)據(jù)類(lèi)型

Python 文件操作

Python 對(duì)象和類(lèi)

Python 日期和時(shí)間

Python 高級(jí)知識(shí)

Python 參考手冊(cè)

Python 程序?qū)蓚€(gè)矩陣相乘

Python 實(shí)例大全

在此示例中,我們將學(xué)習(xí)使用兩種不同的方法來(lái)乘法矩陣:嵌套循環(huán)和嵌套列表理解

要理解此示例,您應(yīng)該了解以下Python編程主題:

在Python中,我們可以將矩陣實(shí)現(xiàn)為嵌套列表(列表內(nèi)的列表)。

我們可以將每個(gè)元素視為矩陣的一行。

例如X = [[1, 2], [4, 5], [3, 6]]將表示一個(gè)3x2矩陣。

第一行可以選擇為X[0]。并且,可以將第一行第一列中的元素選擇為X[0][0]。

僅當(dāng)X的列數(shù)等于Y的行數(shù)時(shí),才定義兩個(gè)矩陣X和Y的乘法。

如果X是一個(gè)n X m矩陣,Y是一個(gè)m X l矩陣,那么XY是有定義的,它的維數(shù)是n X l(但YX沒(méi)有定義)。下面是在Python中實(shí)現(xiàn)矩陣乘法的幾種方法。

源代碼:使用嵌套循環(huán)的矩陣乘法

# 程序使用嵌套循環(huán)將兩個(gè)矩陣相乘

# 3x3 matrix
X = [[12,7,3],
    [4 ,5,6],
    [7 ,8,9]]
# 3x4 矩陣
Y = [[5,8,1,2],
    [6,7,3,0],
    [4,5,9,1]]
# 結(jié)果是 3x4
result = [[0,0,0,0],
         [0,0,0,0],
         [0,0,0,0]]

# 遍歷X行
for i in range(len(X)):
   # 遍歷Y列
   for j in range(len(Y[0])):
       # 遍歷Y行
       for k in range(len(Y)):
           result[i][j] += X[i][k] * Y[k][j]

for r in result:
   print(r)

輸出結(jié)果

[114, 160, 60, 27]
[74, 97, 73, 14]
[119, 157, 112, 23]

在這個(gè)程序中,我們使用了嵌套的for循環(huán)來(lái)遍歷每一行和每一列。我們?cè)诮Y(jié)果中累加乘積的和。

這種技術(shù)很簡(jiǎn)單,但是隨著我們?cè)黾泳仃嚨碾A數(shù),計(jì)算量很大。

對(duì)于較大的矩陣操作,我們建議使用優(yōu)化的軟件包,例如NumPy,它比上述代碼快幾倍(大約1000倍)。

源代碼:使用嵌套列表理解的矩陣乘法

# 程序乘兩個(gè)矩陣使用列表理解

# 3x3 矩陣
X = [[12,7,3],
    [4 ,5,6],
    [7 ,8,9]]

# 3x4 矩陣
Y = [[5,8,1,2],
    [6,7,3,0],
    [4,5,9,1]]

# 結(jié)果是 3x4
result = [[sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*Y)] for X_row in X]

for r in result:
   print(r)

這個(gè)程序的輸出與上面相同。要理解上面的代碼,我們必須首先了解內(nèi)置函數(shù)zip()和使用*運(yùn)算符解壓縮參數(shù)列表。

我們使用嵌套列表立即來(lái)遍歷矩陣中的每個(gè)元素。該代碼起初看起來(lái)很復(fù)雜且不可讀。但是一旦掌握了列表理解的技巧,您可能就不會(huì)想使用嵌套循環(huán)了。

Python 實(shí)例大全

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清