深度学习预热——Numpy库的简单使用
Python等动态类型语言一般比C和C等静态类型语言运算速度慢。实际上,如果是运算量大的处理对象,用C/C写程序更好。为此,当Python中追求性能时,人们会用C/C来实现处理的内容。Python则承担“中间人”的角色,负责调用那些用C/ C写的程序。NumPy中,主要的处理也都是通过C或C++实现的。 因此,我们可以在不损失性能的情况下,使用Python便利的语法
¶NumPy 的算术运算
下面是NumPy数组的算术运算的例子。
>>> x = np.array([1.0, 2.0, 3.0]) |
¶NumPy的N维数组
NumPy不仅可以生成一维数组(排成一列的数组),也可以生成多维数组。 比如,可以生成如下的二维数组(矩阵)。
>>> A = np.array([[1, 2], [3, 4]]) |
这里生成了一个2×2的矩阵A。另外,矩阵A的形状可以通过shape查看, 矩阵元素的数据类型可以通过dtype查看。下面,我们来看一下矩阵的算术运算。
>>> B = np.array([[3, 0],[0, 6]]) |
A = np.array([[1, 2], [3, 4]])
B = np.array([10, 20])
A * B
array([[ 10, 40],
[ 30, 80]])
在这个运算中,如图1-2所示,一维数组B被“巧妙地”变成了和二位数 组A相同的形状,然后再以对应元素的方式进行运算。 综上,因为NumPy有广播功能,所以不同形状的数组之间也可以顺利 地进行运算。

运用这个标记法,可以获取满足一定条件的元素。例如,要从X中抽出 大于15的元素,可以写成如下形式。
对NumPy数组使用不等号运算符等(上例中是X > 15) ,结果会得到一个 布尔型的数组。上例中就是使用这个布尔型数组取出了数组的各个元素(取 出True对应的元素)。
### 多维数组的运算
A = np.array([[1,2], [3,4]])
A.shape
(2, 2)B = np.array([[5,6], [7,8]])
B.shape
(2, 2)np.dot(A, B)
array([[19, 22],
[43, 50]])
这里,A和B都是2×2的矩阵,它们的乘积可以通过NumPy的 np.dot()函数计算(乘积也称为点积)。np.dot()接收两个NumPy数组作为参 数,并返回数组的乘积。这里要注意的是,np.dot(A, B)和np.dot(B, A)的 值可能不一样。
2×3的矩阵和3×2 的矩阵的乘积 可按如下形式用Python来实现。

### 神经网络的内积
使用NumPy矩阵来实现神经网络。以图3-14中的简 单神经网络为对象。这个神经网络省略了偏置和激活函数,只有权重

实现该神经网络时,要注意X、W、Y的形状,特别是X和W的对应 维度的元素个数是否一致,这一点很重要

使用np.dot(多维数组的点积),可以一次性计算出Y 的结果。 这意味着,即便Y 的元素个数为100或1000,也可以通过一次运算就计算出 结果!如果不使用np.dot,就必须单独计算Y 的每一个元素(或者说必须使 用for语句),非常麻烦
---
**注**:本文为**斋藤康毅**的《**深度学习入门:基于Python的理论与实现**》片段摘抄与学习笔记

最近文章