【问题标题】:Numpy function not differentiating between dot product and matrix multiplicationNumpy函数不区分点积和矩阵乘法
【发布时间】:2018-09-14 11:30:55
【问题描述】:

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

其中 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

这为两个函数调用提供点积。

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

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

我错了吗?有什么方法可以区分a乘以a转置和a转置乘以a

谢谢!

【问题讨论】:

标签: python numpy matrix linear-algebra


【解决方案1】:

请注意,一维 numpy 数组不是列向量(转置等操作没有意义)。如果要获得列向量,则应将数组定义为二维数组(第二维大小等于 1)。

但是,您不需要定义列向量,因为 numpy 提供了通过如下操作一维数组来完成您想要的操作的函数

P = np.outer(a,a)/np.inner(a,a)

【讨论】:

    【解决方案2】:

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

    a = np.array([1,4,9])[np.newaxis]
    
    P = (a.T @ a) / (a @ a.T)
    

    【讨论】:

    • 谢谢。这对我也有很大帮助,我正在寻找合适的 2D 解决方案。
    猜你喜欢
    • 1970-01-01
    • 2015-03-31
    • 2017-07-20
    • 1970-01-01
    • 2020-05-08
    • 2016-10-10
    • 2019-10-08
    • 1970-01-01
    相关资源
    最近更新 更多