Numpy矩阵减法混淆

ast*_*max 9 python numpy matrix

我有一个关于我用两个numpy矩阵意外执行的操作结果的问题(后来修复了).

假设我有一个列向量,A = [1,2,3],行向量B = [1,1,1].据我所知,没有正确的数学方法来"减去"这两个向量,即这应该是一个未定义的操作.但是,当我这样做时,我会回来:

>>> matrix([[0, 1, 2],
            [0, 1, 2],
            [0, 1, 2]])
Run Code Online (Sandbox Code Playgroud)

我认为这可能是某种广播操作,但这仍然让我感到麻烦.numpy.matrix对象不应只包含数学上有效的矩阵运算吗?

任何帮助表示赞赏!

谢谢!

kit*_*ith 2

A 和 B 一起广播:

A = np.matrix([[1],[2],[3]])
#a 3x1 vector
#1
#2
#3

B = np.matrix([[1,1,1]])
#a 1x3 vector
#1 1 1

A-B
#a 3x3 vector
#0 0 0
#1 1 1
#2 2 2
Run Code Online (Sandbox Code Playgroud)

A 沿其大小 1 维(列)广播到

#1 1 1
#2 2 2
#3 3 3
Run Code Online (Sandbox Code Playgroud)

B 沿其大小 1 维(行)广播到

#1 1 1
#1 1 1
#1 1 1
Run Code Online (Sandbox Code Playgroud)

然后像往常一样计算两个 3x3 矩阵的 AB。

如果您想知道为什么它会这样做而不是报告错误,那是因为 np.matrix 继承自 np.array。np.matrix 覆盖乘法,但不覆盖加法和减法,因此它使用基于 np.array 的运算,当维度允许时进行广播。

  • 我同意阿斯特玛克斯。在处理矩阵对象时,我认为默认情况下抛出错误或异常比执行意外操作更好。Matlab 正确地做到了这一点 (3认同)