亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

numpy.dot 函數矩陣乘法:Numpy 將 AxB 矩陣和 1xB 矩陣相乘為 AxB 矩陣和

numpy.dot 函數矩陣乘法:Numpy 將 AxB 矩陣和 1xB 矩陣相乘為 AxB 矩陣和

白豬掌柜的 2022-11-01 14:27:21
在下面的代碼中,我必須將一個 5x3 矩陣與一個向量相乘。對我來說,向量似乎是一個 1x3 矩陣,但是,python 將它視為一個 3x1 矩陣。為什么 w 在下面的代碼中是一個 3x1 矩陣,或者為什么 python 將它變成一個 3x1 矩陣?先感謝您。import numpyX = numpy.array([[4.6, 3.4, 1.4],    [6.5, 3.2, 5.1],    [5.7, 2.9, 4.2],    [6.6, 3.,  4.4],    [6.,  2.9, 4.5]])print(X)print(X.shape)print("")wb0 = numpy.array([0.0, 1.0, 1.0, 1.0])print(wb0)print("shape wb0",wb0.shape)print()w = wb0[1:]print(w)print("shape w",w.shape)print("")print(numpy.dot(X,w)) 
查看完整描述

2 回答

?
慕后森

TA貢獻1802條經驗 獲得超5個贊

不要將數學中使用的維度的含義與 numpy 中的維度混淆。

你的第一個矩陣的形狀是 (5,3),這是正確的。它的維度為 2。

第二個向量不是 numpy 的 3x1 矩陣。它的形狀為 (3,),維度為 1:


wb0 = np.array([ 1.0, 1.0, 1.0])

numpy 的等效 3x1 矩陣如下:


wb1 = numpy.array([[1.0], [1.0], [1.0]])

print(wb1)

print("shape wb1",wb1.shape)

如您所見,這里我們有兩個維度來wb1比較wb0。雖然wb0在您看來是 3x1 矩陣,但對于 numpy,它是一個 (3,) 矩陣。

的 1x3 矩陣wb01如下:


wb2 = numpy.array([[1.0, 1.0, 1.0]])

print(wb2)

print("shape wb0",wb2.shape)

因此,numpy 中的維度和形狀不同于一般代數中用于矩陣的維度??梢栽谝韵戮€程中找到非常詳盡的解釋:Difference between numpy.array shape (R, 1) and (R,)


在您的情況下,numpy 能夠在 (5,3) 矩陣和 (3,) 矩陣之間進行矩陣乘法的原因是dot函數的實現:


如果 a 是 ND 數組且 b 是一維數組,則它是 a 和 b 的最后一個軸上的和積。


如果對 (5,3) 矩陣和 (3,1) 矩陣使用點函數,您會得到相同的結果:


import numpy


X = numpy.array([[4.6, 3.4, 1.4],

    [6.5, 3.2, 5.1],

    [5.7, 2.9, 4.2],

    [6.6, 3.,  4.4],

    [6.,  2.9, 4.5]])


print(X)

print(X.shape)

print("")


wb0 = numpy.array([0.0, 1.0, 1.0, 1.0])

print(wb0)

print("shape wb0",wb0.shape)


print()


w = numpy.array([[1.0], [1.0], [1.0]])

print(w)

print("shape w",w.shape)


print("")

print(numpy.dot(X,w)) 

唯一的區別是,在您的情況下,最終結果的形狀為 (5,),而在第二種情況下,結果的形狀為 (5,1)。


查看完整回答
反對 回復 2022-11-01
?
藍山帝景

TA貢獻1843條經驗 獲得超7個贊

numpy.dot() 中的計算很大程度上取決于您的輸入變量。文檔字符串給出:

點(a,b,out=None)

[...]

  • 如果a是 ND 數組并且是 1-D 數組,則它是 和 的最后一個軸上的和b積。ab

  • 如果ab都是二維數組,則它是矩陣乘法,但最好使用 :func: matmulor a @ b。

[...]

如果要使用矩陣乘法,則必須定義w為二維數組:

wb0 = numpy.array([[0.0, 1.0, 1.0, 1.0]])
w = wb0[0,1:]


查看完整回答
反對 回復 2022-11-01
  • 2 回答
  • 0 關注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號