例如,我有一个投影矩阵的方程,适用于1维向量:
其中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 ?
谢谢!
答案 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)