将 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)
我有以下 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)