为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用numpy进行元素明智的矩阵乘法

如何使用numpy进行元素明智的矩阵乘法

繁星点点滴滴 2021-10-26 10:30:19
我有两个 numpy 数组,a 大小(20*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 关注
  • 191 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信