Numpy函数不区分点积和矩阵乘法

时间:2018-04-04 19:23:07

标签: python numpy matrix linear-algebra

例如,我有一个投影矩阵的方程,适用于1维向量:

enter image description here

其中P是投影矩阵,T是转置。

我们知道我们不能更多地简化这一部分(通过取消术语),因为分母是点积(因此是0维标量,数字),而分子是矩阵(列乘以行是矩阵)。

我不确定如何在numpy中定义此等式的函数,考虑到我使用的当前函数不区分这些术语,乘法被视为具有可交换属性。我使用numpy.multiply方法:

>>> import numpy as np
>>> a = np.array(a)
>>> a*a.T
array([1, 4, 9])
>>> a.T*a  
array([1, 4, 9])

如你所见,它们都是输出向量。

我也尝试过使用numpy.matmul方法:

>>> np.matmul(a, a.T)
14
>>> np.matmul(a.T, a)
14

为两个函数调用提供了dot产品。

我也尝试numpy.dot,但它显然不适用于分子术语。

根据我的理解,第一个函数调用应输出矩阵(因为列乘以行),第二个函数调用应在适当的情况下输出标量。

我错了吗?是否有任何方法可以区分 a 乘以 a 转置和 a 转置乘以 a

谢谢!

2 个答案:

答案 0 :(得分:3)

请注意,1维numpy数组不是列向量(并且诸如转置之类的操作没有意义)。如果要获取列向量,则应将数组定义为二维数组(第二个维度大小等于1)。

但是,您不需要定义列向量,因为numpy提供了通过操作1D数组来执行所需操作的函数,如下所示

String

答案 1 :(得分:2)

斯泰利奥斯'答案是最好的,毫无疑问,但为了完整性,您可以将@运算符与二维数组一起使用:

a = np.array([1,4,9])[np.newaxis]

P = (a.T @ a) / (a @ a.T)