numpy
1.numpy简介
- 多维数组库,创建多维数组很方便,可以替代多维列表
- 速度比多维列表快
- 支持向量和矩阵的各种数学运算
- 所有元素类型必须相同
pip install numpy 安装numpy库
2.numpy创建数组的函数
函数 | 功能 |
array(x) | 根据列表或元组x创建数组 |
arange(x,y,i) | 创建一维数组,元素等价于range(x,y,i) |
linspace(x,y,n) | 创建一个由区间[x,y]的n-1等分点构成的一维数组,包含x和y |
random.randint(...) | 创建一个元素为随机整数的数组 |
zeros(n) | 创建一个元素全为0.0的长度为n的数组 |
ones(n) | 创建一个元素全为1.0的长度为n的数组 |
示例程序:
import numpy as np # numpy简称为np print(np.array([1, 2, 3])) # [1 2 3] print(np.arange(1, 9, 2)) # [1 3 5 7] print(np.linspace(1, 10, 4)) # [ 1. 4. 7. 10.] print(np.random.randint(10, 20, [2, 3])) # [[18 13 12] # [11 17 17]] print(np.random.randint(10, 20, 5)) # [11 19 13 11 19] a = np.zeros(3) print(a) # [0. 0. 0.] print(list(a)) # [0.0, 0.0, 0.0] a = np.zeros((2, 3), dtype=int) # 创建一个2行3列元素都是整数0的数组 print(a)
3.numpy数组常用属性和函数
属性或函数 | 含义或功能 |
dtype | 数组元素的类型 |
ndim | 数组是几维的 |
shape | 数组每一维的长度 |
size | 数组元素的个数 |
argwhere(...) | 查找元素 |
tolist | 转换为list |
min() | 求最小元素 |
max() | 求最大元素 |
reshape(...) | 改变数组的形状 |
flatten() | 转换成一维数组 |
示例程序:
import numpy as np b = np.array([i for i in range(12)]) # b是[0 1 2 3 4 5 6 7 8 9 10 11] a = b.reshape((3, 4)) # 转换成3行4列的数组,b不变 print(len(a)) # 3 a有3行 print(a.size) # 12 a有12个元素 print(a.ndim) # 2 a是2维数组 print(a.shape) # (3, 4) a是3行4列 print(a.dtype) # int32 a是32位的整数 L = a.tolist() # 将a转换成列表,a不变 print(L) # [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]] b = a.flatten() # 转换成一维数组 print(b) # [ 0 1 2 3 4 5 6 7 8 9 10 11]
4.numpy数组元素增删
函数 | 功能 |
append(x,y) | 若y是数组、列表或元组,就将y的元素添加进数组x得新数组。否则将y本身添加进数组x得新数组 |
concatenate(...) | 拼接多个数组 |
delete(...) | 删除数组元素得新数组 |
numpy数组一旦生成,元素就不能增删。上面返回的是一个新的数组
实例程序:
# 添加数组元素 import numpy as np a = np.array((1, 2, 3)) # a是[1 2 3] b = np.append(a, 10) # a是不会变化的 print(b) # [ 1 2 3 10] print(np.append(a, [10, 20])) # [1 2 3 10 20] c = np.zeros((2, 3), dtype=int) # c是2行3列的全0数组 print(np.append(a, c)) # [1 2 3 0 0 0 0 0 0] print(np.concatenate((a, [10, 20], a))) # [ 1 2 3 10 20 1 2 3] print(np.concatenate((c, np.array([[10, 20, 30]])))) # [[ 0 0 0] # [ 0 0 0] # [10 20 30]] print(np.concatenate((c, np.array([[1, 2], [10, 20]])), axis=1)) # axis=0行增加 axis=1列增加 # [[ 0 0 0 1 2] # [ 0 0 0 10 20]]
# numpy删除数组元素 import numpy as np a = np.array((1, 2, 3, 4)) b = np.delete(a, 1) # 删除a中下标为1的元素,a不会改变 print(b) # [1 3 4] b = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]) print(np.delete(b, 1, axis=0)) # 删除b的第1行得新数组,axis=0操作行,axis=1操作列 # [[ 1 2 3 4] # [ 9 10 11 12]] print(np.delete(b, 1, axis=1)) # 删除b的第1列得新数组 # [[ 1 3 4] # [ 5 7 8] # [ 9 11 12]] print(np.delete(b, [1, 2], axis=0)) # 删除b的第1、2行得新数组 # [[1 2 3 4]] print(np.delete(b, [1, 3], axis=1)) # 删除b得第1、2列得新数组 # [[ 1 3] # [ 5 7] # [ 9 11]]
5.numpy数组中查找元素
示例程序
import numpy as np a = np.array((1, 2, 3, 5, 3, 4)) pos = np.argwhere(a == 3) # pos的值为[[2] [4]] a = np.array([[1, 2, 3], [4, 5, 2]]) print(2 in a) # True pos = np.argwhere(a == 2) # [[0 1] [1 2]] # print(pos) b = a[a > 2] # 抽取a中大于2的元素形成一个一维数组 print(b) # [3 4 5] a[a > 2] = -1 # a变成了[[1 2 -1] [-1 -1 2]] # print(a)
6.numpy数组的数学运算
# numpy数组的数学运算 import numpy as np a = np.array((1, 2, 3, 4)) b = a + 1 print(b) # [2 3 4 5] print(a * b) # [2 6 12 20] print(a + b) # [3 5 7 9] c = np.sqrt(a * 10) # a*10是[10 20 30 40] print(c) # [3.16227766 4.47213595 5.47722558 6.32455532]
7.numpy数组的切片
numpy数组的切边是“视图”,是原数组的一部分,而非一部分的拷贝
# numpy数组的切片 import numpy as np a = np.arange(8) # [0 1 2 3 4 5 6 7] b = a[3:6] # 注意b是a的一部分 print(b) # [3 4 5] c = np.copy(a[3:6]) # c是a的一部分拷贝 b[0] = 100 # 会修改a print(a) # [ 0 1 2 100 4 5 6 7] print(c) # [3 4 5] 不受b的影响 a = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]) b = a[1:3, 1:4] print(b) # [[ 6 7 8] # [10 11 12]]