python矩阵相乘例题_百道Python入门级练习题(新手友好)第一回合——矩阵乘法...
題目描述
【問(wèn)題描述】
編寫(xiě)程序,完成3*4矩陣和4*3整數(shù)矩陣的乘法,輸出結(jié)果矩陣。
【輸入形式】
一行,供24個(gè)整數(shù)。以先行后列順序輸入第一個(gè)矩陣,而后輸入第二個(gè)矩陣。
【輸出形式】
先行后列順序輸出結(jié)果矩陣,每個(gè)元素的顯示寬度為8格,屏幕一行只顯示矩陣的一行。
【樣例輸入】
1 2 3 4 5 6 7 8 9 1 2 3 9 8 7 6 5 4 3 2 1 1 2 3
上面的輸入,意味著要計(jì)算如下兩個(gè)矩陣的乘積。
第一個(gè)矩陣 :
1 2 3 4
5 6 7 8
9 1 2 3
第二個(gè)矩陣:
9 8 7
6 5 4
3 2 1
1 2 3
【樣例輸出】
左側(cè)的1,2,3不是程序輸出的內(nèi)容。
34 32 30
110 100 90
96 87 78
123
知識(shí)點(diǎn)
輸入一組整數(shù)
矩陣的輸入
矩陣乘法
矩陣的輸出
輸出的值占8格
步驟1:輸入一組整數(shù)
line = input().split()
nums = []
for s in line:
nums.append(int(s))
print(nums)12345
對(duì)以上代碼,說(shuō)明如下:
1. 第1行,input()讀入整行,split()以空格為分隔符把整行分割成多段,生成數(shù)字字符串列表line。
2. 第2行,nums變量用來(lái)存儲(chǔ)整數(shù)列表,初始化為空列表。
3. 第3,4行,for循環(huán)的作用是遍歷數(shù)字字符串列表line內(nèi)的每個(gè)元素s,把這個(gè)元素s轉(zhuǎn)換為整數(shù)后,加到nums列表尾部。
4. 第5行,打印nums列表的值,可以幫助檢查是否輸入成功。
步驟2:生成兩個(gè)相乘的矩陣
步驟2是把步驟1接收到的整數(shù)分裝到兩個(gè)矩陣內(nèi)。
#1.1 第1個(gè)矩陣
mtx1 = []
for r in range(3):
row = []
for c in range(4):
row.append(nums[r * 4 + c])
mtx1.append(row)
print(mtx1)
#第二個(gè)矩陣
mtx2 = []
start = 3 * 4 #起點(diǎn)下標(biāo)
for r in range(4):
row = []
for c in range(3):
row.append(nums[start + r * 3 + c])
mtx2.append(row)
print(mtx2)123456789101112131415161718
對(duì)于以上代碼,解釋如下:
1. 第2行,mtx1用來(lái)記住第一個(gè)矩陣。它是3行4列的矩陣。它的初值是空列表。
2. 第3行到第7行,是一個(gè)for循環(huán)。每循環(huán)一次,得到矩陣的一行。row變量用來(lái)記住這一行。
3. 第4行,row變量初始化為空列表。
4. 第5,6行,是一個(gè)for循環(huán)。每循環(huán)一次,就往row列表中加入一個(gè)整數(shù)。循環(huán)4次,就生成了一行。
5. 第7行,把矩陣的一行加到mtx1的尾部。mtx1是以列表作為元素的列表,也即矩陣。
6. 第9行開(kāi)始,生成第二個(gè)矩陣mtx2。生成第二個(gè)矩陣的做法與生成第一個(gè)矩陣的做法是類(lèi)似的。不同點(diǎn)有兩處。第一處是,矩陣的元素來(lái)自nums列表中start位置及其后的元素。第二處不同是,第二個(gè)矩陣是4行3列的。
7. print(mtx1)和print(mtx2)這兩條語(yǔ)句用于打印兩個(gè)矩陣的值,幫助檢查是否正確生成了兩個(gè)矩陣。不過(guò),矩陣的元素在屏幕上沒(méi)有分行顯示,而是顯示在同一行。
步驟3:矩陣相乘
3行4列的矩陣乘以4行3列的矩陣,結(jié)果是3行3列的矩陣。你事先要熟悉矩陣的乘法。
以下代碼的思路是,依次求出3行3列矩陣的每一個(gè)元素的值。
#矩陣乘法
result = []
for r in range(3):
row = []
for c in range(3):
v = mtx1[r][0] * mtx2[0][c] + mtx1[r][1] * mtx2[1][c] + mtx1[r][2] * mtx2[2][c] + mtx1[r][3] * mtx2[3][c]
row.append(v)
result.append(row)12345678
對(duì)于以上代碼,說(shuō)明如下:
1. result用來(lái)存儲(chǔ)3行3列的矩陣。
2. 第2行到第7行構(gòu)成一條for循環(huán)語(yǔ)句。一共循環(huán)3次。每循環(huán)一次,求出result矩陣的一行。
3. 第3行,row變量用來(lái)存儲(chǔ)矩陣的一行。初值設(shè)為空列表。
4. 第4行到第6行構(gòu)成一條for循環(huán)語(yǔ)句。這是內(nèi)循環(huán)。一共循環(huán)3次。每循環(huán)一次,求出第r行(r從0開(kāi)始編號(hào))中的一個(gè)元素的值。v變量記住這個(gè)值。第6行把v變量加到row列表尾部。
5. 第7行,row加到result矩陣尾部,成為新的一行。
步驟4:輸出矩陣
輸出矩陣要滿(mǎn)足兩個(gè)要求:
1. 分成3行。
2. 每一行的每個(gè)元素占8格。
代碼是:
for r in range(3):
print(str(result[r][0]).rjust(8) + str(result[r][1]).rjust(8) + str(result[r][2]).rjust(8))12
對(duì)以上代碼說(shuō)明如下:
1. for循環(huán)一共執(zhí)行3次。每一次,輸出矩陣的一行。
2. str(result[r][0]).rjust(8)的作用是,首先把元素result[r][0]轉(zhuǎn)換為字符串形式的值,然后調(diào)用字符串的rjust方法,使得字符串長(zhǎng)度不足8格的話(huà),左側(cè)填充空格。假設(shè),result[r][0]值是34,那么輸出的時(shí)候,左側(cè)將填充6個(gè)空格,形成有8個(gè)字符的字符串,即“======34”。這里,=代表的是空格。
完整的代碼
#矩陣乘法
#1. 輸入
line = input().split()
nums = []
for s in line:
nums.append(int(s))
print(nums)
#1.1 第1個(gè)矩陣
mtx1 = []
for r in range(3):
row = []
for c in range(4):
row.append(nums[r * 4 + c])
mtx1.append(row)
print(mtx1)
#第二個(gè)矩陣
mtx2 = []
start = 3 * 4 #起點(diǎn)下標(biāo)
for r in range(4):
row = []
for c in range(3):
row.append(nums[start + r * 3 + c])
mtx2.append(row)
print(mtx2)
#矩陣乘法
result = []
for r in range(3):
row = []
for c in range(3):
v = mtx1[r][0] * mtx2[0][c] + mtx1[r][1] * mtx2[1][c] + mtx1[r][2] * mtx2[2][c] + mtx1[r][3] * mtx2[3][c]
row.append(v)
result.append(row)
#輸出結(jié)果矩陣
for r in range(3):
print(str(result[r][0]).rjust(8) + str(result[r][1]).rjust(8) + str(result[r][2]).rjust(8))12345678910111213141516171819202122232425262728293031323334353637383940
小結(jié)
分步驟解題,每步達(dá)成一個(gè)小目標(biāo)。
每一步的末尾,打印輸出中間結(jié)果,有利于驗(yàn)證代碼是否正確。
不熟悉的話(huà),多讀幾遍,自己默寫(xiě)幾遍,就會(huì)成為你的代碼。Python學(xué)習(xí)資料或者需要代碼、視頻加這個(gè)群吧548加上377還有875 都在這里了
總結(jié)
以上是生活随笔為你收集整理的python矩阵相乘例题_百道Python入门级练习题(新手友好)第一回合——矩阵乘法...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: laravel redis_thinkp
- 下一篇: websocket python爬虫_p