matlab与python的转换实现了简单的计算

matlab与python的转换实现了简单的计算,python,matlab,Python,Matlab,再一次我需要你的帮助, 为了介绍这个问题,我得到了以下信息: x=[013455678] y=[9101113141516] x=x(:) y=y(:) X=[X.^2,X.*y,y.^2,X,y] a=总和(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

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

x=[013455678]
y=[9101113141516]
x=x(:)
y=y(:)
X=[X.^2,X.*y,y.^2,X,y]
a=总和(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.数组([X*X,X*y,y*y,X,y]).T
a=np.sum(X)/np.dot(X.T,X)#与问题线
X
是相同的

但是我在
a上得到了(5,5)矩阵

问题来自mult beetwen X.T和X我想,我会尝试np.matmul,np.dot,转置和T,我不知道为什么我不能得到
a
(1,5)或(5,1)向量。。。错的是a计算上那两种语言的翻译


有什么建议吗?

问题是
sum

在MATLAB中,默认值
sum
在第一个轴上求和。在
numpy
sum
中,对所有值求和

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

将这两个矩阵划分为:

s=sum(X)
XX=(X'*X)
a=s/XX
正在求解线性系统:
XX*t=s

要在Python/NumPy中实现同样的效果,只需使用(确保使用带有正确的
轴的
参数的
np.sum()
,以模仿与MATLAB的
sum()
相同的行为,如注释和@AnderBiguri所示):

x=np.数组([0,1,3,4,5,6,7,8])
y=np.数组([9,10,11,12,13,14,15,16])
X=np.数组([X*X,X*y,y*y,X,y]).T
s=np.和(X,0)
XX=np.点(X.T,X)
a=np.linalg.solve(XX,s)
印刷品(a)
# [-0.01388889  0.02777778 -0.01388889 -0.23611111  0.23611111]

问题是,在matlab版本中,您对dot product使用smal x
x
,但在python版本中,您对dot product使用Capital x
x
。我的错是,我编辑了Postlet,但是,请更改您的断言:matlab代码不是真的。事实上,这是错误的。您的MATLAB代码没有返回您声称的内容,它返回“错误使用/矩阵维度必须一致”。您的
a
输出在MATLAB版本中正确吗?@Cocapy问题在于,在MATLAB中
sum
给出了一个包含每列总和的向量,而
np.sum(X)
给出了所有元素的总和。您需要在np.sum中提到axis=0作为
np.sum(X,axis=0)
。我也尝试了,但它没有改变(5,5),但感谢您的尝试