如何在Python中将两个大小相等的向量转换为两个向量的成对乘积矩阵?

06odsfpq  于 2023-06-04  发布在  Python
关注(0)|答案(1)|浏览(117)

很惊讶我找不到这个答案,但我希望基本上创建一个协方差矩阵,但不是每个值都是协方差,我希望每个单元格都是两个向量的乘积。如果我有一个1x5的向量,我想得到一个5x5的矩阵。
例如:
输入:

[1, 2, 3, 4, 5]

输出:

[[ 1,  2,  3,  4,  5],
 [ 2,  4,  6,  8, 10],
 [ 3,  6,  9, 12, 15],
 [ 4,  8, 12, 16, 20],
 [ 5, 10, 15, 20, 25]]

有没有一个快速的方法,而不建立一个循环?

g2ieeal7

g2ieeal71#

简单地使用numpy.outer。它计算两个向量的外积。

a = np.array([1, 2, 3, 4, 5])
res = np.outer(a,a)
print(res)

array([[ 1,  2,  3,  4,  5],
       [ 2,  4,  6,  8, 10],
       [ 3,  6,  9, 12, 15],
       [ 4,  8, 12, 16, 20],
       [ 5, 10, 15, 20, 25]])

如果你对“广播”感兴趣,那么:

res = a[:,None]*a
print(res)

array([[ 1,  2,  3,  4,  5],
       [ 2,  4,  6,  8, 10],
       [ 3,  6,  9, 12, 15],
       [ 4,  8, 12, 16, 20],
       [ 5, 10, 15, 20, 25]])

相关问题