如何将两个矩阵中的列向量和行向量相乘而不产生循环?

2024-10-03 17:22:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题,关于如何将矩阵A中的列向量与其转置A.T中的行向量相乘。你能给我一些提示吗?谢谢大家!

  • 假设我们有一个(3x3)矩阵A,如下所示
  • 我们希望将A中的向量与A.T中的向量相乘(例如红色的向量)。结果是一个(3x3)矩阵
  • 虽然我们有3个行向量,但最终的输出形状应该是(3x3x3)

问题:我可以问一下,我们有没有办法使用矩阵操作来实现这一点?因为如果我们只使用A @ A.T,结果将是(3x3),而不是(3x3x3)

(我们可以通过迭代A的每一列来解决它。但是我们可以在不使用for循环的情况下解决它吗?谢谢!)

enter image description here

# here is my solution with for-loop

import numpy as np

A = np.array([[1,0,1],[2,10,0],[0,0,10]])

target = []
for i in range(A.shape[0]):
    
    a = A[:,i].reshape(A.shape[0],1)
    tem = a@a.T
    target.append(tem)

print(np.array(target).shape)

Tags: targetforhereisnp情况矩阵array
1条回答
网友
1楼 · 发布于 2024-10-03 17:22:06

我已经解决了这个问题。我们只需要以下两个简单步骤:

  • 重塑矩阵以获得一个或多个用于广播的轴:

    • B1 = A.reshape(3,3,1)

    • B2 = A.reshape(3,1,3)

  • 然后使用点/互积

    • B1@B2是我们想要的

(非常感谢@hpaulj的建议!谢谢)

相关问题 更多 >