将 Matlab 数组转换为 python

converting a Matlab array to python

我有以下 Matlab 代码:

A=[length(x) sum(x) sum(y) sum(x.*y);
    sum(x) sum(x.^2) sum(x.*y) sum(y.*x.^2);
    sum(y) sum(x.*y) sum(y.^2) sum(x.*y.^2);
    sum(x.*y) sum((x.^2).*y) sum(x.*y.^2) sum((x.^2).*(y.^2))];

v=[sum(z); sum(z.*x); sum(z.*y); sum(x.*y.*z)];

solution=inv(A)*v;

a=solution(1);
b=solution(2);
c=solution(3);
d=solution(4);

我想将其转换为 Python。我对 Matlab 一无所知,经过一些研究得出了以下 Python 代码:

A = [
    [len(x), x.sum(), y.sum(), (x * y).sum()],
    [x.sum(), (x**2).sum(), (x * y).sum(), ((y * x) ** 2).sum()],
    [y.sum(), (x * y).sum(), (y**2).sum(), ((x * y) ** 2).sum()],
    [(x * y).sum(), ((x**2) * y).sum(), ((x * y)**2).sum(), ((x**2) * (y**2)).sum()]
]

v = [z.sum(), (z * x).sum(), (z * y).sum(), (x * y * z).sum()]

solution = np.linalg.inv(A) * v

我期望一个包含 4 个值的列表,这应该是我想用于函数的系数。然而,结果是另一个矩阵。我做错了什么?

在最后一步,你应该使用矩阵乘法而不是相应的位置乘法。

矩阵乘法使用operator@:

solution = np.linalg.inv(A) @ v

或函数numpy.matmul:

solution = np.matmul(np.linalg.inv(A), v)