Numpy转置乘法问题

24 投票
3 回答
49272 浏览
提问于 2025-04-16 01:03

我尝试用numpy找到一个矩阵和它的转置相乘后的特征值,但没能成功。

testmatrix = numpy.array([[1,2],[3,4],[5,6],[7,8]])
prod = testmatrix * testmatrix.T
print eig(prod)

我原本希望得到这个乘积的结果:

5    11    17    23
11    25    39    53
17    39    61    83
23    53    83   113

以及特征值:

0.0000
0.0000
0.3929
203.6071

但是在把testmatrix和它的转置相乘时,我遇到了一个错误:ValueError: shape mismatch: objects cannot be broadcast to a single shape

在MatLab中,这个乘法是可以正常工作的,但我需要在Python应用中使用它。

有人能告诉我我哪里出错了吗?

3 个回答

1

另一种方便表示这个操作的方法是 testmatrix @ testmatrix.T

在numpy中,@这个符号表示矩阵相乘,你可以在这里查看相关信息。

8

你正在使用逐元素相乘,也就是在两个Numpy矩阵上用*这个符号进行的操作,这个操作在Matlab中相当于.*这个符号。你可以使用

prod = numpy.dot(testmatrix, testmatrix.T)
27

你可能会觉得这个教程很有用,因为你已经知道MATLAB了。

另外,试试用dot()函数来乘testmatrix,也就是numpy.dot(testmatrix,testmatrix.T)

显然,numpy.dot是用来在数组之间进行矩阵乘法的!而*这个符号是用来进行逐元素相乘的(在MATLAB中是.*)。

撰写回答