创建数组的函数
- Numpy本质上是一个多维数组库
- 创建多维数组很方便,可以替代多维列表
- 速度比多维列表块
- 支持向量和矩阵的各种数学运算
- 所有元素类型必须相同
| 函数 | 功能 |
|---|---|
| array(x) | 根据列表或元组x创建数组(即参数是列表或元组) |
| arange(x,y,i) | 创建一维数组,元素等价于range(x,y,i)——[x,y)步长为i |
| linespace(x,y,n) | 创建一个由区间[x,y]的n-1等分点构成的一维数组,包含x和y |
| random.randint() | 创建一个元素为随机整数的数组=》python随机数是伪随机 |
| 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.array((1,2,3))) #>>[1 2 3] print(np.arange(1,9,2)) #=>[1,9) 步长为2 #>>[1 3 5 7] print(np.linspace(1,10,4)) #=> [1,10] 出一个元素n个的等差数列 #>>[ 1. 4. 7. 10.] x,y,n #==n-1等分点分出n个数 print(np.random.randint(10,20,[2,3])) #>>[10,20) 范围里随机找数,生成两行三列的二维数组 #>>[[12 19 12] #>> [19 13 10]] print(np.random.randint(10,20,5)) #>>[16 10 13 18 17] 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) #>>写了dtype=int使得里面的数字都是整数 #>>[[0 0 0] #>> [0 0 0]]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(a) #>> [[ 0 1 2 3] #>> [ 4 5 6 7] #>> [ 8 9 10 11]] print(len(a)) #>> 3 a有3行 print(a.size) #>> 12 a有12个元素 print(a.ndim) #>>2 a是二维的数组 print(a.shape) #>>(3,4) a是3行4列的数组 print(a.dtype) #>>int32 a的元素类型是31位的整数 L = a.tolist() #>> 转换为列表,赋值给L,a不变 print(L)#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]Numpy数组元素增删
numpy数组一旦生成,元素就不能增删
函数增删的本质都是返回一个新数组
| 函数 | 功能 |
|---|---|
| append(x,y) | 若y是数组、列表或元组,就将y的元素添加金数组x得到新数组;否则将y本身添加进数组x得到新数组(x不变) |
| concatenate(…) | 拼接多个数组或列表 |
| delete(…) | 删除数组元素得到新数组 |
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)) #>>将c拧成一维,再append #>>[1 2 3 0 0 0 0 0 0] print(np.concatenate((a,[10,20],a))) #>>[ 1 2 3 10 20 1 2 3] #!!!注意多维数组的拼接 #c是两行三列的二维数组 print(np.concatenate((c,np.array([[10,20,30]])))) #c拼接一行[10,20,30]得新数组 print(np.concatenate((c,np.array([[1,2],[10,20]])),axis=1)) #axis的参数表明拼接的发生在行拼接还是列拼接 #c的第0行拼接了1,2两个元素、第1行拼接了10,20两个新元素后得到新数组 #print(np.concatenate((c,np.array([[1],[2]])))) #会报错!!!
import numpy as np a = np.array((1,2,3,4)) b = np.delete(a,1) #删除a中下标为1的元素,a不会改变 print(b) #>>[1 3 4] print(a) #>>[1 2 3 4] !!!是复制过去的新数组,不会改变a本身 b = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]]) print(np.delete(b,1,axis=0))#删除b的第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列和第3列得新数组 #>>[[ 1 3] #>> [ 5 7] #>> [ 9 11]] #!!!np的增删不会影响到操作的原数组Numpy 查找
import numpy as np a = np.array((1,2,3,5,3,4)) pos = np.argwhere(a==3) print(pos) #pos是[[2] [4]] #二维数组存储每一个符合条件的元素 a = np.array([[1,2,3],[4,5,2]]) print(2 in a) #>>True pos = np.argwhere(a==2) print(pos) #>>[[0 1] 第0行第1列 #>> [1 2]] 返回值是numpy的数组 b = a[a>2] #!!!达到条件筛查的结果 print(b) #>>[3 4 5] a[a > 2] = -1 #!!!直接进行了修改 print(a) #>>[[ 1 2 -1] #>> [-1 -1 2]]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] a,b对应元素相乘 print(a+b) #>>[3 5 7 9] a,b对应元素相加 #相应元素,因此两个运算数组必须是同型的 c = np.sqrt(a*10) #a*10是[10 20 30 40] print(c) #>>[ 3.16227766 4.47213595 5.47722558 6.32455532]Numpy数组切片
numpy数组的切片是“视图”, 是原数组的一部分,而非一部分的拷贝
import numpy as np a = np.arange(8) #a是[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] c不受b影响 #c是拷贝过来的 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]#二维切片,切除矩形 #行取值[1,3) #列取值[1,4) #b是>>[[ 6 7 8] [10 11 12]]



