NumPy 入门
概述
NumPy 是一个 Python 语言的第三方库,实现了高效的多维数组数据结构并提供了丰富的数学函数库。
使用 conda 安装 NumPy:
1conda install numpy
使用 NumPy 必须先导入,通常按如下方式导入:
1import numpy as np
多维数组
NumPy 中最核心的数据结构为多维数组(n-dimensional array, ndarray),相应的类为 numpy.ndarray
,该类可以同时用于表示标量、向量、矩阵和张量。实际上,标量是维度数量为 0 的多维数组,向量是维度个数为 1 的多维数组,而矩阵是维度维度个数为 2 的多维数组,张量是维度个数大于等于 3 的多维数组。
NumPy 中的 ndarray 和 Python 内置 list 的区别在于:
-
ndarray 是同质的,必须存放相同类型元素;list 是不同质的,可以存放不同类型元素。
-
ndarray 速度更快,占用内存更少
可以如下创建多维数组:
1>>> # 用 Python list 初始化数组
2>>> a = np.array([1, 2, 3, 4, 5, 6])
3>>> a
4array([1, 2, 3, 4, 5, 6])
5>>> # 用嵌套的 list 来初始化数组
6>>> b = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
7>>> b
8array([[ 1, 2, 3, 4],
9 [ 5, 6, 7, 8],
10 [ 9, 10, 11, 12]])
访问数组元素:
1>>> a[0]
21
3>>> b[1][2]
47
1>>> # 元素类型
2>>> a.dtype
3dtype('int64')
4>>> b.dtype
5dtype('int64')
6>>> # 数组形状
7>>> a.shape
8(6,)
9>>> b.shape
10(3, 4)
在 NumPy 中维度也称做轴(axes),例如对于如下形式的 2 维数组:
1[[0., 0., 0.],
2 [1., 1., 1.]]
我们称其包含两个 axes,第一个 axes 长度为 2,第二个 axes 长度为 3。
注:
- 不同多维数组之间可能会共享底层数据,因此对某个多维数组的修改可能会影响到其他多维数组。
创建数组
下面列出来一些常见的用于创建数组的函数:
函数 | 描述 |
---|---|
np.array() | 创建数组(用指定值初始化) |
np.zeros() | 创建元素全部为 0 的数组 |
np.ones() | 创建元素全部为 1 的数组 |
np.empty() | 创建数组(元素未初始化) |
np.arnage() | 创建等间隔的数组 |
np.linspace() | 创建线性分布的数组 |
使用 Python 内置 list 来是初始化数组:
1>>> np.array([1, 2, 3])
2array([1, 2, 3])
创建元素全部为 0 的数组:
1>>> np.zeros(2)
2array([0., 0.])
创建元素全部为 1 的数组:
1>>> np.ones(3)
2array([1., 1., 1.])
创建未初始化的数组:
1>>> np.empty((2, 2))
2array([[4.9e-324, 9.9e-324],
3 [1.5e-323, 2.0e-323]])
创建等间隔的数组:
1>>> np.arange(4)
2array([0, 1, 2, 3])
3>>> np.arange(0, 100, step=5) # step 表示步长
4array([ 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80,
5 85, 90, 95])
创建线性分布的数组:
1>>> np.linspace(0, 10, num=5) # num 表示元素个数
2array([ 0. , 2.5, 5. , 7.5, 10. ])
多维数组默认的元素类型为 np.float64
,可在上述函数中使用 dtype
关键字参数来显式指定元素类型:
1>>> np.arange(5, dtype=np.int64)
2array([0, 1, 2, 3, 4])
3>>> np.arange(5, dtype=np.float32)
4array([0., 1., 2., 3., 4.])
数组信息
下面列出了多维数组的部分属性:
属性 | 描述 |
---|---|
ndarray.ndim | 多维数组维度(轴)个数 |
ndarray.size | 多维数组元素个数 |
ndarray.shape | 多维数组形状 |
ndarray.dtype | 元素类型 |
代码实例:
1>>> a = np.array([[[0, 1, 2, 3],
2... [4, 5, 6, 7]],
3...
4... [[0, 1, 2, 3],
5... [4, 5, 6, 7]],
6...
7... [[0 ,1 ,2, 3],
8... [4, 5, 6, 7]]])
9>>> a.ndim
103
11>>> a.size
1224
13>>> a.shape
14(3, 2, 4)
15>>> a.dtype
16dtype('int64')
总结
- NumPy 是一个 Python 语言的第三方库,实现了高效的多维数组数据结构并提供了丰富的数学函数库。
- NumPy 中最核心的数据结构为多维数组(n-dimensional array, ndarray),相应的类为
numpy.ndarray
,该类可以同时用于表示标量、向量、矩阵和张量。