我再一次需要你的帮助,为了介绍这个问题,我得到了这个:
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)