python实现矩阵叉乘_矩阵乘法的纯Python实现 | 离开Python库!!
一篇文章帶你了解矩陣乘法的純Python實(shí)現(xiàn)
在《這篇文章》中,我們有簡(jiǎn)單提到“矩陣乘法”的相關(guān)知識(shí),如果你不記得了,可以復(fù)習(xí)一下這張圖片。
想起來(lái)了沒(méi)?本篇文章將深入探討在沒(méi)有機(jī)器學(xué)習(xí)庫(kù)的情況下如何從零實(shí)現(xiàn)矩陣乘法!
你有沒(méi)有想過(guò)在沒(méi)有任何復(fù)雜的機(jī)器學(xué)習(xí)庫(kù)的情況下處理機(jī)器學(xué)習(xí)問(wèn)題?畢竟多虧了那些模塊,才可以讓我們的某些操作幾乎可以在眨眼之間完成。
為了真正欣賞這些模塊的美觀和優(yōu)雅,讓我們從頭開始進(jìn)行代碼矩陣乘法,而無(wú)需任何機(jī)器學(xué)習(xí)庫(kù)或模塊。盡管這不是一個(gè)非常復(fù)雜的任務(wù),但這將有助于我們更好地學(xué)習(xí)核心概念并理解NumPy的重要性,它只需幾行代碼即可完成同一任務(wù)。
解決這個(gè)問(wèn)題的方法是從用戶那里獲取所有輸入。這是第一個(gè)和第二個(gè)矩陣的行數(shù)和列數(shù)。另外,根據(jù)每個(gè)矩陣的行數(shù)和列數(shù),我們將分別填充相應(yīng)的替代位置。
在進(jìn)行任何矩陣乘法之前,第一步是檢查兩個(gè)矩陣之間的這種運(yùn)算是否真的可行。這可以通過(guò)檢查第一個(gè)矩陣的列數(shù)是否等于第二個(gè)矩陣中的行數(shù)來(lái)判斷。這可以表述為:
矩陣A的行數(shù) = 矩陣B的列數(shù)
根據(jù)這個(gè)策略,我們可以制定我們的第一個(gè)代碼塊。這可以按如下所示:
r1 = int(input("Enter No of rows of 1st Matrix: "))c1 = int(input("Enter No of columns of 1st Matrix: "))r2 = int(input("Enter No of rows of 2nd Matrix: "))c2 = int(input("Enter No of columns of 2nd Matrix: "))# for matrix multiplication to be possible no of columns in matrix 1 = no of rows in matrix 2if c1==r2:else: print("\nNot possible")這部分看起來(lái)非常簡(jiǎn)單。我們制定了僅在需要時(shí)執(zhí)行矩陣運(yùn)算的計(jì)劃。現(xiàn)在,讓我們看一下如何接收相應(yīng)行和列的輸入。
在繼續(xù)之前,讓我們提出一個(gè)我們正在努力解決的問(wèn)題。下圖是我們必須解決的問(wèn)題。我采用了一種更簡(jiǎn)單的3 * 3和3 * 3矩陣組合,但我保證這種方法可以解決任何復(fù)雜的問(wèn)題,即第一個(gè)矩陣的列與第二個(gè)矩陣的行匹配。
下圖顯示了相應(yīng)的行數(shù)和列數(shù):
現(xiàn)在,我們還制定了問(wèn)題陳述,讓我們從用戶那里獲得所需的輸入,然后開始著手解決這個(gè)問(wèn)題。這可以使用下面的代碼中完成:
????mat1?=?[]????mat2?=?[]????result?=?[]????print("\nEnter?The?Values?in?the?matrix?1:?") for i in range(r1): g=[] for j in range(c1): g.append(int(input()))????????mat1.append(g) for i in range(r1): for j in range(c1): print(mat1[i][j], end = " ") print()在這里,我展示了如何遍歷行和列以輸入第一個(gè)矩陣的值。同樣,您也可以對(duì)第二個(gè)矩陣重復(fù)這些步驟。完成此步驟后,您的輸出應(yīng)如下所示:
現(xiàn)在我們已經(jīng)成功地完成了所有必需的輸入。是時(shí)候循環(huán)這些值并開始計(jì)算它們了。所以,為了闡明矩陣乘法是如何工作的,我們將行與它們各自的列相乘。
矩陣的第一個(gè)值如下所示:
(1*1) + (2*4) +?(3*7) =?(1) +?(8)?+ (21)?= 30
可以使用以下代碼完成此操作:
????for?r?in?range(r1): u=[] for s in range(c2): u.append(int(0)) result.append(u) for r in range(r1): for s in range(c2): result[r][s] print("\nResult is: \n") # iterate through rows of r1 for x in range(len(mat1)): # iterate through columns of c2 for y in range(len(mat2[0])): # iterate through rows of r2 for z in range(len(mat2)): result[x][y] += mat1[x][z] * mat2[z][y] for r in result: print(r)這段代碼將相應(yīng)地計(jì)算結(jié)果,然后得到最終輸出,如下所示:
下圖顯示了已完成的相同計(jì)算。
現(xiàn)在,我們完成了與矩陣乘法的計(jì)算。但是,我很好奇這在numpy上如何工作。讓我們看看——
使用Numpy的實(shí)現(xiàn)過(guò)程:
在僅使用python成功完成了矩陣乘法的工作之后,我們現(xiàn)在可以看看帶有numpy模塊的類似公式的樣子。可以按照以下步驟進(jìn)行:
import?numpy?as?npa1 = np.array([[1,2,3], [4,5,6], [7,8,9]])a2 = np.array([[1,2,3], [4,5,6], [7,8,9]])Answer = np.matmul(a1,a2)Answer通過(guò)對(duì)比發(fā)現(xiàn):使用Numpy進(jìn)行操作時(shí),幾乎沒(méi)有太多個(gè)人的操作,我們只需要知道在numpy中是如何計(jì)算的即可。但是至少讓我們了解到了一些新的東西:體會(huì)到我們使用的機(jī)器學(xué)習(xí)庫(kù)是多么美妙。
結(jié)論:
我們發(fā)現(xiàn),如果不使用現(xiàn)有的出色的機(jī)器學(xué)習(xí)庫(kù),即使是僅需幾行代碼即可完成的簡(jiǎn)單任務(wù)(如矩陣乘法),也將花費(fèi)更長(zhǎng)的時(shí)間來(lái)執(zhí)行。但是,盡管如此,理解核心基礎(chǔ)知識(shí)和理解這些操作是如何執(zhí)行的仍然很重要,我們?cè)诒疚闹写_實(shí)做到了這一點(diǎn)。在本文中,我們研究了如何在不使用任何庫(kù)的情況下對(duì)矩陣乘法進(jìn)行編程。
·? END? ·
HAPPY?LIFE總結(jié)
以上是生活随笔為你收集整理的python实现矩阵叉乘_矩阵乘法的纯Python实现 | 离开Python库!!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 重庆治疗卵巢功能减退最好的医院推荐
- 下一篇: 多重继承_Python 和 Java 基