本文为Lancelod_Liu编译, 转载请保留此行.
原文: 戳.
NumPy 复习
用于机器学习的矩阵形式
行水平列垂直. 每行数据是一个样本(这和MATLAB中某些情况相反). 因此inputs[10, 5]代表有10个样本, 每个样本长度为5. 如果这是一个神经网络的输入, 则输入到第一个隐层的权值应该是一个(5, #hid)的矩阵. #hid为隐层神经元个数.
考虑下面的数列:
>>> numpy.asarray([[1., 2], [3, 4], [5, 6]])
array([[ 1., 2.],
[ 3., 4.],
[ 5., 6.]])
>>> numpy.asarray([[1., 2], [3, 4], [5, 6]]).shape
(3, 2)
这是一个 3x2 矩阵, 有3行2列.
使用下面语句来获取第3行第1列的数据(从1数起):
>>> numpy.asarray([[1., 2], [3, 4], [5, 6]])[2, 0]
5.0
永远从左至右从上至下进行读取. 相邻的[1,2]和[3,4]是两行.
传播Broadcasting
Numpy在算术操作中使用数组的传播操作. 它的意思是小的数组(标量)会被变换成大的数组, 从而使得它们的形状(shape)匹配.
下面是一个传播的例子:
>>> a = numpy.asarray([1.0, 2.0, 3.0])
>>> b = 2.0
>>> a * b
array([2., 4., 6.])
小一些的数组b(此处实际是一个标量, 可以看做0-d的数组)在乘法过程中被传播到和a相同的大小. 这个trick在解释表达式时非常有用. 更详细的内容见: numpy user guide.