總結一下就是,如果a和b兩個矩陣要相乘,a的列數要和b的行數相同的,其實矩陣就是線性代數中對多項式常量的一種抽象表達。
比如:a是2 * 80的矩陣,b是80*2的矩陣,得出的還是2*2的矩陣,簡單說就是結果是a的行*b的列的矩陣,哪怕a的列是10000呢,b的行是10000,都不影響a*b的行列數,a的列只能等於b的行,否則就無法相乘。
所謂矩陣鏈乘法就是:a*b*c*d*e*f......
那a*b*c的的行列到底是多少呢,其實就是a的行*c的列,中間的根本對結果的行列樹無法影響,但是根據乘法的結合律a*b*c,可以是先算a*b,再算*c,先說b*c再算*a,就是(a*b)*c或者a*(b*c),這就有個取捨的問題,也許b*c得到的行列式很小,這樣乘法的計算次數比前者要少很多。
這就引入了動態規劃演算法對a*b*c到底擴上哪個計算次數較少的話題。
以兩個矩陣相乘為例,a1*a2,a1和a2為兩個矩陣,假設a1的行列數是p*q,a2的行列數是q*r。注意這裡由於是a1乘以a2,所以a1的列數要等於a2的行數,否則無法做矩陣乘法,滿足上述條件的矩陣,我們稱之為「相容」的。那麼對於a1*a2而言,我們需要分別執行p*r次對應a1的行元素乘以a2的列元素,根據線性代數知識,不難得出我們一共需要執行p*q*r次乘法。
對於兩個矩陣相乘,一旦矩陣的大小確定下來了,那麼所需執行的乘法次數就確定下來了。那麼對於兩個以上的矩陣呢?是不是也是這樣呢。實際上,對於多個矩陣相乘,乘法執行的次數與「劃分」有關。例如:
以矩陣鏈為例,假設三個矩陣的規模分別為10x100,100x5和5x50。
①以((a1*a2)*a3)方式劃分,乘法執行次數為:10*100*5+10*5*50=5000+2500=7500次
②以(a1*(a2*a3))方式劃分,乘法執行次數為:100*5*50+10*100*50=25000+50000=75000次
相當於====》10x100,100x5和5x50
1:自我理解:
對於a*b而言,我們需要分別執行 (m*p) 次 ==>(對應a1的行元素乘以a2的列元素)
根據線性代數知識,不難得出我們一共需要執行 m*n*p 次乘法
思路:
根據以上得出: 1:(a*b)相當於就是 「 a 」 的行乘以 「 b 」 的列:如下例子 ,設(a*b)=d (a*b)*c ==> (d*c)
也就是:
(上面的這裡不要糾結,只要知道如何比較就可以了,糾結這個就過不去的,反正我是不知道的,哈哈,不糾結,我不是專業做這個的,只用了解就行)
依照上面的公式就能比較出下面的大小:
面試題:深度學習是當前很熱門的機器學習演算法。在深度學習中,涉及到大量矩陣相乘,現在需要計算三個稠密矩陣a,b,c的乘積abc,
假設三個矩陣的尺寸分別為m*n,n*p,p*q,且m
三 向量的加減乘除法
c 語言 標量與向量的乘法除法 放大乙個向量的長度 乘以乙個標量 縮放乙個向量的長度 除以乙個標量 標準化向量 長度為1,方向不變的向量,單位向量 公式 例如標準化乙個2d向量 向量的加法和減法 公式 符號變換即可 距離公式 貼上 vector.h ifndef vector3 h included...
有沒有乘除法指令 數學啟蒙教育三 乘除法的探索
乘法和除法是在小學二年級的時候才學習的內容,但在愛凡,我們把它提公升到了啟蒙教育階段。對未知領域的探索和自我發現,是一件值得去關注和嘗試的事情。我們常感嘆鄰家的孩子優秀卓越,卻忽視他們付出的努力。探索絕不是拔苗助長,好高騖遠,而是腳踏實地,一點一滴地建立起屬於自己獨有的認知能力和學習體系。在過去三周...
行內元素與塊狀元素的三個區別
1.行內元素與塊級元素直觀上的區別 行內元素會在一條直線上排列,都是同一行的,水平方向排列 塊級元素各佔據一行,垂直方向排列。塊級元素從新行開始結束接著乙個斷行。2.塊級元素可以包含行內元素和塊級元素。行內元素不能包含塊級元素。3.行內元素與塊級元素屬性的不同,主要是盒模型屬性上 行內元素設定wid...