matlab移植到python进行简单计算



我再一次需要你的帮助,为了介绍这个问题,我得到了这个:

x=[0 1 3 4 5 6 7 8]
y=[9 10 11 12 13 14 15 16]
x=x(:)
y=y(:)
X=[x.^2, x.*y,y.^2,x,y]
a=sum(X)/(X'*X)
X=
0   0   81  0   9
1   10  100 1   10
9   33  121 3   11
16  48  144 4   12
25  65  169 5   13
36  84  196 6   14
49  105 225 7   15
64  128 256 8   16
a =
-0.0139 0.0278 -0.0139 -0.2361 0.2361

认为matlab代码是绝对真实的

我把它翻译成:

x=[0,1,3,4,5,6,7,8]
y=[9,10,11,12,13,14,15,16]
X=np.array([x*x,x*y,y*y,x,y]).T
a=np.sum(X)/np.dot(X.T,X)#line with the probleme 

X是相同的

但在a上得到(5,5(矩阵

问题来自多重甜菜文X.T和X。我想,我会尝试np.matmul、np.dot、transpose和T,我不知道为什么我不能得到a(1,5(或(5,1(向量。。。翻译甜菜文那两种语言在计算上错了吗

有什么建议吗?

这两个矩阵在MATLAB中的除法:

s = sum(X)
XX = (X'*X)
a = s / XX

t求解线性系统:XX * t = s

要在Python/NumPy中实现相同的功能,只需使用np.linalg.solve()(确保使用np.sum()和正确的axis参数来模拟与MATLAB的sum()相同的行为,如注释和@AnderBiguri的回答所示(:

x=np.array([0,1,3,4,5,6,7,8])
y=np.array([9,10,11,12,13,14,15,16])
X=np.array([x*x,x*y,y*y,x,y]).T
s = np.sum(X, 0)
XX = np.dot(X.T, X)
a = np.linalg.solve(XX, s)
print(a)
# [-0.01388889  0.02777778 -0.01388889 -0.23611111  0.23611111]

问题是sum

在MATLAB中,默认sum在第一个轴上求和。在CCD_ 12中,CCD_。

a=np.sum(X, axis=0)/np.dot(X.T,X)

最新更新