我很难理解为什么Numpy中的点积不会返回标量。我尝试使用以下代码分析计算线性回归的系数:
import numpy as np
# Here the function is defined
def linfit(xdat,ydat):
# Here xbar and ybar (the averages) are calculated
xbar = np.sum(xdat)/len(xdat)
ybar = np.sum(ydat)/len(ydat)
# Insert calculation of m and c here.
diffx = xdat - xbar
m = np.dot(diffx, ydat) / diffx**2
c = ybar - m * xbar
# Return your values as [m, c]
return [m, c]
例如,我使用以下xdat和ydat:
xdat = np.array([[1],
[2],
[3],
[4]])
ydat = np.array([[2],
[4],
[3],
[5]])
diffx生成以下4x1矩阵:
array([[-1.5],
[-0.5],
[ 0.5],
[ 1.5]])
xbar和ybar的结果分别为2.5和3.5
我遇到的问题是如何计算m。更具体地说,计算diffx和ydat的点积,这也是一个4x1矩阵
我期望的结果是一个标量,但我尝试的每种方法都无法返回:
1-m = np.dot(diffx, ydat)
返回值错误:形状(4,1)和(4,1)未对齐:1(尺寸1)!=4(0)。我理解维度的问题,但为什么下面的方法有效?(返回3):
x = [1, 3, -5]
y = [4, -2, -1]
dot = np.dot(x, y)
print(dot)
2-我尝试转置ydat,得到一个4x4矩阵:
m = np.dot(diffx, ydat.T)
[[-3. -6. -4.5 -7.5]
[-1. -2. -1.5 -2.5]
[ 1. 2. 1.5 2.5]
[ 3. 6. 4.5 7.5]]
3-我尝试了m = diffx*ydat
并得到:
[[-3. ]
[-2. ]
[ 1.5]
[ 7.5]]
4-我尝试了m = diffx @ ydat
并获取了值错误:matmul:输入操作数1的核心维度0不匹配,具有gufunc签名(n?,k),(k,m?->;(n?,m?)(尺寸4不同于1)
5-我尝试了m = diffx @ ydat.T
再次得到了一个4x4矩阵
唯一有效的方法是m = sum(diffx * ydat)
,但Numpy根本不会给我答案。我想我遗漏了一些关于线性代数或Numpy的概念
非常感谢您的帮助
目前没有回答
相关问题 更多 >
编程相关推荐