真的是要自己认认真真写个模型才会发现 好多小坑
np.dot、np.matmul、@、*、np.multiply
变量定义:
1 | # 一维 |
Out:
1 | array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) |
一维的话:
1 | # 与标量相乘 |
1 | # 一维是 |
二维的话:
变量:
1 | # 二维 |
Out:
1 | array([[ 15, 18, 21], |
总结一下:
np.multiply与*等价,都是点乘
np.dot与@与np.matmul基本等价,但是只有np.dot可以用于矩阵与标量相乘,然后一维时是求内积,二维时是叉乘,两个参与运算的矩阵需要满足矩阵乘法的规则,但是官方更推荐使用np.matmul()和@用于矩阵乘法。
有博主这么说,倒也没毛病
当进行向量的内积运算时,可以通过np.dot()
当进行矩阵的乘法运算时,可以通过np.matmul()或者@
当进行标量的乘法运算时,可以通过np.multiply()或者*
(np.dot()、np.multiply()、np.matmul()方法以及*和@运算符的用法总结):
权重与变量相乘:
1 | a = np.arange(10) |
Out:
1 | array([[ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81], |
比较神奇的是,就是比如data 是3×10的,然后权重是1×10的,但是没关系,会自动得到1×3…
1 | a = np.zeros((10,)) |