NumPy是Python中的一个运算速度非常快的一个数学库,它非常重视数组。它允许你在Python中进行向量和矩阵计算,并且由于许多底层函数实际上是用C编写的,因此你可以体验在原生Python中永远无法体验到的速度。
import numpy as np |
数组基础
numpy数组是一个值网格,所有类型都相同,并由非负整数元组索引。 维数是数组的排名; 数组的形状是一个整数元组,给出了每个维度的数组大小。
NumPy围绕这些称为数组的事物展开。实际上它被称之为 ndarrays
创建数组
np.array([0, 1, 2, 3, 4]) |
array([0, 1, 2, 3, 4])
np.arange(5) |
array([0, 1, 2, 3, 4])
np.linspace(0, 10, 11) |
array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])
创建特殊数组
np.zeros((2,2)) |
array([[0., 0.],
[0., 0.]])
np.ones((2,2)) |
array([[1., 1.],
[1., 1.]])
np.full((2,2), 3) |
array([[3, 3],
[3, 3]])
np.eye(2) |
array([[1., 0.],
[0., 1.]])
np.random.random((2,2)) |
array([[7.98653826e-01, 6.45391375e-01],
[5.07987569e-04, 1.20063144e-01]])
多维数组切片
a = np.array([[11, 12, 13, 14, 15], |
25
a[0, 1:4] |
array([12, 13, 14])
a[1:4, 0] |
array([16, 21, 26])
a[::2,::2] |
array([[11, 13, 15],
[21, 23, 25],
[31, 33, 35]])
a[:, 1] |
array([12, 17, 22, 27, 32])
a[1] |
array([16, 17, 18, 19, 20])
数组属性
a.dtype # 元素类型 |
dtype('int64')
a.size # 元素个数 |
25
a.shape # 行数和列数 |
(5, 5)
a.itemsize # 每个项占用的字节数 |
8
a.ndim # 数组的维数 |
2
a.nbytes # 数组中的所有数据消耗掉的字节数 |
200
数组操作
基本操作符
a = np.arange(25) |
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
b = np.array([10, 62, 1, 14, 2, 56, 79, 2, 1, 45, |
array([[10, 62, 1, 14, 2],
[56, 79, 2, 1, 45],
[ 4, 92, 5, 55, 63],
[43, 35, 6, 53, 24],
[56, 3, 56, 44, 78]])
a + b |
array([[ 10, 63, 3, 17, 6],
[ 61, 85, 9, 9, 54],
[ 14, 103, 17, 68, 77],
[ 58, 51, 23, 71, 43],
[ 76, 24, 78, 67, 102]])
a - b |
array([[-10, -61, 1, -11, 2],
[-51, -73, 5, 7, -36],
[ 6, -81, 7, -42, -49],
[-28, -19, 11, -35, -5],
[-36, 18, -34, -21, -54]])
a * b |
array([[ 0, 62, 2, 42, 8],
[ 280, 474, 14, 8, 405],
[ 40, 1012, 60, 715, 882],
[ 645, 560, 102, 954, 456],
[1120, 63, 1232, 1012, 1872]])
a / b |
array([[0. , 0.01612903, 2. , 0.21428571, 2. ],
[0.08928571, 0.07594937, 3.5 , 8. , 0.2 ],
[2.5 , 0.11956522, 2.4 , 0.23636364, 0.22222222],
[0.34883721, 0.45714286, 2.83333333, 0.33962264, 0.79166667],
[0.35714286, 7. , 0.39285714, 0.52272727, 0.30769231]])
a ** 2 |
array([[ 0, 1, 4, 9, 16],
[ 25, 36, 49, 64, 81],
[100, 121, 144, 169, 196],
[225, 256, 289, 324, 361],
[400, 441, 484, 529, 576]])
a < b |
array([[ True, True, False, True, False],
[ True, True, False, False, True],
[False, True, False, True, True],
[ True, True, False, True, True],
[ True, False, True, True, True]])
a > b |
array([[False, False, True, False, True],
[False, False, True, True, False],
[ True, False, True, False, False],
[False, False, True, False, False],
[False, True, False, False, False]])
数组特殊运算符
a = np.arange(10) |
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
a.sum() |
45
a.min() |
0
a.max() |
9
a.cumsum() |
array([ 0, 1, 3, 6, 10, 15, 21, 28, 36, 45])
索引
缺省索引
a = np.arange(0, 100, 10) |
array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])
a[a >= 50] |
array([50, 60, 70, 80, 90])
a[[1,5,-1]] |
array([10, 50, 90])
Where 函数
np.where(a <= 50) |
(array([0, 1, 2, 3, 4, 5]),)
np.where(a <= 50)[0] |
array([0, 1, 2, 3, 4, 5])
a[np.where(a <= 50)[0]] |
array([ 0, 10, 20, 30, 40, 50])
合并
a = np.array([1,1,1]) |
array([[1, 1, 1],
[2, 2, 2]])
np.hstack((a,b)) # 横向合并 |
array([1, 1, 1, 2, 2, 2])
分割
a = np.arange(12).reshape((3, 4)) |
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
np.split(a, 2, axis=1) # 纵向分割 |
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]
np.split(a, 3, axis=0) # 横向分割 |
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]