矩阵乘法问题 - Numpy vs Matlab?

时间:2015-06-01 15:15:15

标签: python arrays matlab numpy matrix

我正在尝试将一些Matlab代码翻译成Python(使用numpy)。我有以下Matlab代码:

(1/x)*eye(2)

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

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

我得到错误"形状(1,)和(2,2)未对齐:1(暗0)!= 2(暗0)"当我尝试运行numpy代码时。

显然我不理解某事。有谁知道适当的numpy代码是什么?

2 个答案:

答案 0 :(得分:4)

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

如果你想在numpy中实现同样的功能,你可以在MATLAB中执行相同的操作:

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

如果x是兼容维度的矩阵,那么您使用numpy.dot

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

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

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

答案 1 :(得分:1)

基本上在numpy操作中*和点不同。

(*)执行逐元素运算–每个矩阵元素与其他矩阵对应元素

a.dot(c)–执行实际的数学矩阵乘法,这是我们在高中时期研究的。

a = np.arange(9).reshape(3,3)

b = np.arange(10,19).reshape(3,3)

In [47]: a*b

Out[47]:
array([[ 0, 11, 24],
[ 39, 56, 75],
[ 96, 119, 144]])

In [48]: a.dot(b)

Out[48]:
array([[ 45, 48, 51],
[162, 174, 186],
[279, 300, 321]])
相关问题