最近做机器学习的作业,作业也不难但是总是训练出一些反人类的结果(吐血),最后发现大多是因为对numpy库的使用不熟导致的。这里写个笔记记录一下。
(一)乘法对比
np.dot()和np.multiply和乘号(*)的区别
1.multiply和乘号的用法是一样的。
2.dot用来做矩阵乘法,multiply只是把对应位置相乘(不会求和)
具体见以下例子
import numpy as np
x = np.array([1,2,3])
y = np.array([1,2,1])
#对于一维数组,对应位置相乘然后把结果相加
print(np.dot(x,y))#output 8
#对应位置相乘
print(np.multiply(x,y))#output [1 4 3]
print(x*y)
x = np.array([[1,2],[3,4],[5,6]])
y = np.array([[1],[1]])
#对于矩阵,做矩阵乘法
print(np.dot(x,y))#output [[3],[7],[11]]
#要满足broadcast条件
print(np.multiply(x,y))#报错 ValueError: operands could not be broadcast together with shapes (3,2) (2,1)
#把y换成满足broadcast条件的矩阵
y = np.array([[1,2]])
print(np.multiply(x,y))#output [[1,4],[3,8],[5,12]]
print(x*y)
(二)求和、求均值
np.sum()就是把矩阵、数组里面所有的元素加起来,np.mean就是把np.sum()的结果除以元素个数。其结果都是标量。
import numpy as np
x = np.array([[1,2],[3,4],[5,6]])
y = np.array([1,2,3])
print(np.sum(x))#output 21
print(np.sum(y))#output 6
print(np.mean(x))#output 3.5
print(np.mean(y))#output 2.0
写代码的时候一定要清楚现在做到这一步的结果是标量还是向量还是矩阵,别搞得稀里糊涂的啊喂。