第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

到位矩陣乘法numpy

到位矩陣乘法numpy

元芳怎么了 2021-05-14 23:22:13
我有一個點數(shù)組的列表,當(dāng)我遍歷它時,我想進行就地矩陣乘法,即我想將結(jié)果存儲在同一矩陣中。該代碼本質(zhì)上是:for p in p_list:         # R is a 3x3 matrix     p[:,:] = np.matmul(R,p)此代碼未顯示錯誤,但結(jié)果不正確,就好像在數(shù)組中執(zhí)行乘法并按計算結(jié)果進行替換一樣,因此它創(chuàng)建了錯誤的輸出矩陣。刪除[:,:]可得出正確的乘法。1)為什么會這樣呢?2)我使用[:,:]的主要原因是確保將結(jié)果存儲回列表p_list中。有正確的方法(不使用中間變量)嗎?
查看完整描述

3 回答

?
縹緲止盈

TA貢獻2041條經(jīng)驗 獲得超4個贊

matmul 接受一個out參數(shù)

如果p_listndarray帶形狀的N, 3,那么您可以一次完成整個乘法matmul

np.matmul(p_list, R.T, out=p_list)


查看完整回答
反對 回復(fù) 2021-05-25
?
紅糖糍粑

TA貢獻1815條經(jīng)驗 獲得超6個贊

以@sacul的示例為例:


In [59]: R.shape

Out[59]: (3, 3)

In [60]: p_list.shape

Out[60]: (2, 3)


In [58]: np.array([np.matmul(R,p) for p in p_list])

Out[58]: 

array([[1.54190819, 2.86411033, 2.13484841],

       [3.7506842 , 6.75463885, 4.89299192]])

einsum 生成相同的(新的)數(shù)組而沒有外部循環(huán):


In [61]: np.einsum('ij,kj->ki',R,p_list)

Out[61]: 

array([[1.54190819, 2.86411033, 2.13484841],

       [3.7506842 , 6.75463885, 4.89299192]])

和一樣ufunc,它接受一個out參數(shù):


In [63]: np.einsum('ij,kj->ki',R,p_list, out=p_list)

Out[63]: 

array([[1.54190819, 2.86411033, 2.13484841],

       [3.7506842 , 6.75463885, 4.89299192]])

In [64]: p_list

Out[64]: 

array([[1.54190819, 2.86411033, 2.13484841],

       [3.7506842 , 6.75463885, 4.89299192]])

我確定它使用了一個中間緩沖區(qū),但是應(yīng)該比逐行迭代要快。與使用out相比,讓它返回一個新數(shù)組要慢一些。


進行尺寸調(diào)整后,matmul可以在一個調(diào)用中執(zhí)行整個計算(關(guān)鍵是將的最后一個暗角R與第二個和最后一個暗角配對p_list(已修改))。


In [84]: (R@p_list[:,:,None])[:,:,0]

Out[84]: 

array([[1.54190819, 2.86411033, 2.13484841],

       [3.7506842 , 6.75463885, 4.89299192]])


查看完整回答
反對 回復(fù) 2021-05-25
  • 3 回答
  • 0 關(guān)注
  • 143 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號