【问题标题】:How to divide (1*3) vector by a (3*3) matrix using Numpy? a/b does not work如何使用 Numpy 将 (1*3) 向量除以 (3*3) 矩阵? a/b 不起作用
【发布时间】:2021-03-11 17:03:39
【问题描述】:
a = np.array([[0.1562,0.0774,0.0702]])
b = np.array([
[0.0365,0.0191,0.0217],
[0.0191,0.0331,0.0292],
[0.0217,0.0292,0.0591]])

MATLAB 中的输出(期望的输出)是:

 4.4911    0.2724   -0.5958

我在 Python 中得到的输出是:

4.27945205 4.05235602 3.23502304
8.17801047 2.33836858 2.40410959
7.19815668 2.65068493 1.18781726

我在 Python 中使用的代码是:

a/b

我也尝试过np.divide(a,b),但它们都给出了相同的输出,这不是我想要的。 MATLAB 中的 '/' vs './' 有什么问题吗

我在 Python 中的代码应该是什么才能获得与 MATLAB 中相同的输出?

【问题讨论】:

  • 矩阵除法不存在。在 MATLAB 中,矩阵除法算子实际上是一个线性方程求解器。方程 AB=C 可以通过编写 A=C/B 在 MATLAB 中求解 A。在 Python 中,您可能需要寻找求解线性方程组的函数。
  • @CrisLuengo 嗨,你是说 C = A/B 吗?
  • @Anonymous,a 的形状为 (1, 3),您指的是形状为 (3, 3) 的数组,但您显示的 b 的形状为 (5, 5)。您能展示一下您使用的实际 3x3 矩阵吗?
  • 你可以使用np.linalg.solve(b.T, a.T)
  • 是的,numpy / 是逐元素的,就像 MATLAB 的 ./ 一样(对于其他运算符,如 .*.+ 也是如此)。

标签: python matlab numpy matrix vector


【解决方案1】:

你可以用 numpy.linalg.lstsq

解决这个系统
import numpy as np
    
a = np.array([[0.1562,0.0774,0.0702]])
b = np.array([
        [0.0365,0.0191,0.0217],
        [0.0191,0.0331,0.0292],
        [0.0217,0.0292,0.0591]])
        
        
x = np.linalg.lstsq(b.T,a.T)
print(x)

Result:

(array([[ 4.49111376],
       [ 0.2724206 ],
       [-0.59580119]]), array([], dtype=float64), 3, array([0.09268238, 0.02342602, 0.0125916 ]))

正如@WarrenWeckesser 所指出的,对于这个问题,np.linalg.solve 也可以工作,类似于上面的语法

【讨论】:

    猜你喜欢
    • 2018-10-01
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    相关资源
    最近更新 更多