我正在尝试将我拥有的一些Matlab代码转换为Python(使用numpy)。我有以下Matlab代码:

(1/x)*eye(2)


X只是1000000。据我了解,Matlab中的*表示矩阵乘法,而等效的是numpy中的.dot。所以在Python中,我有:

numpy.array([(1/x)]).dot(numpy.identity(2))


尝试运行numpy代码时,出现错误“形状(1,)和(2,2)不对齐:1(dim 0)!= 2(dim 0)”。

显然我听不懂。有人知道正确的numpy代码是什么吗?

最佳答案

由于x是标量,因此如果在MATLAB中将矩阵乘以标量,它只会按该值缩放所有条目。无需矩阵乘法。

如果要在numpy中实现相同的目的,请执行与MATLAB中相同的操作:

(1/x)*numpy.identity(2)


如果x是兼容尺寸的矩阵,则可以使用numpy.dot

(1/x).dot(numpy.identity(2))


因此,在决定执行此操作之前,需要确保您知道x是什么。

numpy通过使用*运算符执行逐元素乘法,因此,如果要进行实际的矩阵乘法,可以使用numpy.dot。您将获得不兼容的尺寸,因为不可能在标量和矩阵之间进行真正的矩阵乘法。

10-07 19:46
查看更多