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

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

如何使用numpy進行元素明智的矩陣乘法

如何使用numpy進行元素明智的矩陣乘法

繁星點點滴滴 2021-10-26 10:30:19
我有兩個 numpy 數組,a 大?。?0*3*3)和 b 大小(3*3)。設 a=(a1, a2, ..., a20)。我想像這樣計算矩陣乘積元素:c=(c1, c2, ..., c20), ci=bT ai b, i=1~20。如何使用 numpy 有效地做到這一點?使用 for 循環的慢版本是這樣的:a = np.random.sample((20, 3, 3))b = np.random.sample((3, 3))c = np.zeros_like(a)for i0, ai in enumerate(a):    c[i0] = np.dot(b.T, np.dot(ai, b))
查看完整描述

2 回答

?
守著星空守著你

TA貢獻1799條經驗 獲得超8個贊

您可以將操作置于矢量化形式中,因為您的輸入是 NumPy 數組。不需要顯式for循環和索引。


PS:感謝@yatu 發現答案形狀不一樣。現在我添加了swapaxes以獲得一致的答案作為 OP 的方法


np.random.seed(1)


a = np.random.sample((4, 3, 3))

b = np.random.sample((3, 3))


c = np.dot(b.T, np.dot(a, b)).swapaxes(0,1)

print (c)

[[[0.96496962 1.30807122 0.55382266]

  [1.42300972 1.98975139 0.81871374]

  [0.32358338 0.45493059 0.1346777 ]]


 [[1.46772447 2.15650254 0.87555186]

  [2.26335921 3.33689922 1.28679305]

  [0.71561413 0.96507585 0.54309736]]


 [[1.50660527 2.36946435 0.59771395]

  [2.49705244 3.76328176 1.06274954]

  [0.96090846 1.43636151 0.31807679]]


 [[1.03706878 1.94107476 0.61884642]

  [1.74739926 3.07419808 1.03537019]

  [0.59565039 1.09721382 0.37283626]]]


查看完整回答
反對 回復 2021-10-26
?
富國滬深

TA貢獻1790條經驗 獲得超9個贊

你可以試試np.matmul(b.T, np.dot(a,b)):


import numpy as np

import pandas as pd


a = np.random.sample((4, 3, 3))

b = np.random.sample((3, 3))

c = np.zeros_like(a)


# using for loop

for i0, ai in enumerate(a):

    c[i0] = np.dot(b.T, np.dot(ai, b))


# alternative method

e = np.zeros_like(a)

e = np.matmul(b.T, np.dot(a,b))


# checking for equal

print(np.array_equal(c, e))


查看完整回答
反對 回復 2021-10-26
  • 2 回答
  • 0 關注
  • 229 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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