Numpy 矢量化与求和与点积

Numpy 矢量化与求和与点积,numpy,Numpy,我正在为一个简单的神经网络编写一个简单的线性回归代价函数(Python)。我遇到了以下两种使用numpy(np)矩阵对m个示例的错误(成本)求和的替代方法 成本函数为: def compute_cost(X, Y, W): m = Y.size; H = h(X,W) error = H-Y J = (1/(2*m)) * np.sum(error **2, axis=0) #1 (sum squared error over m examples) return J X是输入矩阵。 Y是输

我正在为一个简单的神经网络编写一个简单的线性回归代价函数(Python)。我遇到了以下两种使用numpy(np)矩阵对m个示例的错误(成本)求和的替代方法

成本函数为:

def compute_cost(X, Y, W):
m = Y.size;
H = h(X,W)
error = H-Y
J = (1/(2*m)) *  np.sum(error **2, axis=0) #1 (sum squared error over m examples)
return J
X是输入矩阵。 Y是输出矩阵(标签)。 W是权重矩阵

这种说法似乎是:

J = (1/(2*m)) *  np.sum(error **2, axis=0) #1 (sum squared error over m examples)
可替换为:

J = (1/(2*m)) * np.dot(error.T, error) #2
同样的结果


我不明白为什么np.dot等同于对m个示例求和,或者为什么这两个语句给出相同的结果。请您提供一些线索,并给我指出一些链接,在那里我可以阅读更多内容并理解np.sum和np.dot之间的关系。

没有什么特别的,只是简单的线性代数

根据,
np.dot(a,b)
对不同类型的输入执行不同的操作

如果a和b都是一维数组,则它是向量的内积 (没有复合共轭)

如果a和b都是二维阵列,则为 矩阵乘法,但最好使用matmul或a@b

如果你的
error
是一维数组,那么转置
error.T
等于
error
,那么运算
np.dot
就是它们的内积,等于每个元素的和乘以2

如果您的
error
是二维数组,那么您应该遵循矩阵乘法原理,因此
error.T的每一行都将乘以
error
的每一列。当
错误
是列向量时,结果将是1*1矩阵,类似于标量。当
错误
是一个1×N行向量时,它将返回一个N×N矩阵