數(shù)組與數(shù)的運(yùn)算
arr = np.array([[1, 2, 3, 2, 1, 4], [5, 6, 1, 2, 3, 1]])
arr + 1
arr * 2
arr / 2
# 可以對比python列表的運(yùn)算,看出區(qū)別
a = [1, 2, 3, 4, 5]
a * 3
數(shù)組與數(shù)組的運(yùn)算
arr1 = np.array([[1, 2, 3, 2, 1, 4], [5, 6, 1, 2, 3, 1]]) arr2 = np.array([[1, 2, 3, 4], [3, 4, 5, 6]]) 上面這個(gè)能進(jìn)行運(yùn)算嗎,結(jié)果是不行的!
嘗試如下操作呢?
a = np.arange(10).reshape((2,5))
b = np.arange(10,20).reshape((2,5))
a+b
接下來就需要引入數(shù)組間操作的規(guī)則:廣播機(jī)制
廣播(broadcast)機(jī)制
執(zhí)行 broadcast 的前提在于,兩個(gè) ndarray 執(zhí)行的是 element-wise的運(yùn)算,Broadcast機(jī)制的功能是為了方便不同形狀的ndarray(numpy庫的核心數(shù)據(jù)結(jié)構(gòu))進(jìn)行數(shù)學(xué)運(yùn)算。
當(dāng)操作兩個(gè)數(shù)組時(shí),numpy會(huì)逐個(gè)比較它們的shape(構(gòu)成的元組tuple),只有在下述情況下,兩個(gè)數(shù)組才能夠進(jìn)行數(shù)組與數(shù)組的運(yùn)算。
- 維度相等
- shape(其中相對應(yīng)的一個(gè)地方為1)
廣播機(jī)制的目的在于:把不同形狀的兩個(gè)陣列變成相同 上述(2,1,4)與(3,1)中,從尾部算起,其中第一個(gè)數(shù)組的末位4,第二個(gè)數(shù)組的末位為1,符合廣播機(jī)制中的相對應(yīng)的一個(gè)地方為1,依次往前位數(shù)類推,兩個(gè)數(shù)組滿足廣播機(jī)制,所以可以進(jìn)行運(yùn)算 再例如:
Image (3d array): 256 x 256 x 3
Scale (1d array): 3
Result (3d array): 256 x 256 x 3
A (4d array): 9 x 1 x 7 x 1
B (3d array): 8 x 1 x 5
Result (4d array): 9 x 8 x 7 x 5
A (2d array): 5 x 4
B (1d array): 1
Result (2d array): 5 x 4
A (2d array): 15 x 3 x 5
B (1d array): 15 x 1 x 1
Result (2d array): 15 x 3 x 5
如果是下面這樣,則不匹配:
A (1d array): 10
B (1d array): 12
A (2d array): 2 x 1
B (3d array): 8 x 4 x 3
思考:下面兩個(gè)ndarray是否能夠進(jìn)行運(yùn)算?
arr1 = np.array([[1, 2, 3, 2, 1, 4], [5, 6, 1, 2, 3, 1]])
arr2 = np.array([[1], [3]])
arr1形狀為:(2,6),arr2形狀為:(2,1)
矩陣運(yùn)算
現(xiàn)在思考如下的學(xué)生成績問題: 思考:如何能夠直接得出每個(gè)學(xué)生的成績?
什么是矩陣
矩陣,英文matrix,和array的區(qū)別矩陣必須是2維的,但是array可以是多維的。
- np.mat()
將數(shù)組轉(zhuǎn)換成矩陣類型
矩陣乘法運(yùn)算
矩陣乘法的兩個(gè)關(guān)鍵:
- 形狀改變
- 運(yùn)算規(guī)則
形狀改變: 必須符合上面的式子,否則運(yùn)算出錯(cuò)。 運(yùn)算規(guī)則: 矩陣乘法api: -np.matmul -np.dot
矩陣應(yīng)用場景
大部分機(jī)器學(xué)習(xí)算法需要用到
版權(quán)聲明: 筆者博客文章主要用來作為學(xué)習(xí)筆記使用,內(nèi)容大部分整理自互聯(lián)網(wǎng),如有侵權(quán),請聯(lián)系博主刪除!
|