numpy简介
Numpy是一个python包,他代表“Numeric Python ”。他是一个由多维数组对象和用于处理数组的例程集合组成的库。
使用Numpy,开发人员可以执行以下操作:
- 数组的算数和逻辑运算
- 傅里叶变换和用于图形操作的例程
- 与线性代数有关的操作。Numpy拥有线性代数和随机数生成的内置函数
numpy属性
import numpy as np
通过numpy可以创建指定的矩阵,并且可以查看该矩阵的维度、形状、大小、元素类型等
import numpy as np array=np.array([[1,2,3], [4,5,6], [7,8,9]]) print(array) ''' [[1 2 3] [4 5 6] [7 8 9]] ''' #查看矩阵的维度 ---->看括号的数量[] print(array.ndim) #2 #矩阵的形状 print(array.shape) #(3, 3) #矩阵的大小 print(array.size) #9 #矩阵中元素的类型 print(array.dtype) #int32
创建array
创建一维数据并指定元素的数据类型
import numpy as np #指定元素数据类型 a=np.array([1,2,3],dtype=np.int32) print(a.dtype) #int32 print(a) #[1 2 3] b=np.array([1,2,3],dtype=np.float) print(b.dtype) #float64 print(b) #[1. 2. 3.]
创建二维数据
d=np.array([[1,2,3], [4,5,6]]) print(d) ''' [[1 2 3] [4 5 6]] '''
生成指定特殊矩阵
#生成2行3列全为0的矩阵 zero=np.zeros((2,3)) print(zero) ''' [[0. 0. 0.] [0. 0. 0.]] ''' #生成3行4列全为1的矩阵 one=np.ones((3,4)) print(one) ''' [[1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.]] ''' #生成3行2列全都接近于0但不等于0的矩阵 empty=np.empty((3,2)) print(empty) ''' [[0. 0.] [0. 0.] [0. 0.]] '''
生成指定范围的一维数组
#生成指定范围的一维数组 e=np.arange(10) print(e) #[0 1 2 3 4 5 6 7 8 9] f=np.arange(4,12) print(f) #[ 4 5 6 7 8 9 10 11] g=np.arange(1,20,3) print(g) #[ 1 4 7 10 13 16 19]
将生成的一维数据转换为指定行列数的矩阵--->重新定义矩阵的形状
h=np.arange(8).reshape(2,4) print(h) ''' [[0 1 2 3] [4 5 6 7]] '''
numpy的运算
加减乘(对应位相乘)除
import numpy as np arr1=np.array([[1,2,3], [4,5,6]]) arr2=np.array([[1,1,2], [2,3,3]]) #矩阵的加法 print(arr1+arr2) ''' [[2 3 5] [6 8 9]] ''' #矩阵的减法 print(arr1-arr2) ''' [[0 1 1] [2 2 3]] ''' #矩阵的乘法--->对应位相乘 print(arr1*arr2) ''' [[ 1 2 6] [ 8 15 18]] ''' #矩阵的除法 print(arr1/arr2) ''' [[1. 2. 1.5 ] [2. 1.66666667 2. ]] '''
幂、取余、取整、元素同加
import numpy as np arr1=np.array([[1,2,3], [4,5,6]]) arr2=np.array([[1,1,2], [2,3,3]]) #求幂操作 print(arr1**arr2) ''' [[ 1 2 9] [ 16 125 216]] ''' #矩阵的取余 print(arr1%arr2) ''' [[0 0 1] [0 2 0]] ''' #矩阵的取整 print(arr1//arr2) ''' [[1 2 1] [2 1 2]] ''' #所有元素加同一个数--->乘、减、除类似 print(arr1+2) ''' [[3 4 5] [6 7 8]] '''
判断、矩阵乘、转置
import numpy as np arr1=np.array([[1,2,3], [4,5,6]]) arr2=np.array([[1,1,2], [2,3,3]]) #矩阵的判断 arr3=arr1>3 print(arr3) ''' [[False False False] [ True True True]] ''' #矩阵乘法规则的乘法 #方式一 arr=np.dot(arr1,arr4) print(arr) ''' [[ 6. 6. 6. 6. 6.] [15. 15. 15. 15. 15.]] ''' #方式二 arr1.dot(arr4) #转置矩阵 print(arr1.T) ''' [[1 4] [2 5] [3 6]] ''' print(np.transpose(arr1)) ''' [[1 4] [2 5] [3 6]] '''
随机数生成以及矩阵的运算
随机数生成
import numpy as np sample1=np.random.random((3,2)) #生成3行2列从0到1的随机数 print(sample1) ''' [[0.17574158 0.94161903] [0.31902432 0.11888639] [0.93937211 0.57857994]] ''' sample2=np.random.normal(size=(3,2)) #生成3行2列符合标准正态分布的随机数 print(sample2) ''' [[ 1.25383118 -0.97649298] [ 0.97212156 -0.93796601] [-1.39450905 -0.44917851]] ''' sample3=np.random.randint(0,10,size=(3,2)) #生成3行2列从0到10的随机整数 print(sample3) ''' [[2 7] [0 3] [0 2]] '''
矩阵的运算
#求和 print(np.sum(sample1)) #3.073223370929319 #求最小值 print(np.min(sample1)) #0.11888638852057853 #求最大值 print(np.max(sample1)) #0.941619034678746 #对列求和 print(np.sum(sample1,axis=0)) #[1.434138 1.63908537] #对行求和 print(np.sum(sample1,axis=1)) #[1.11736062 0.4379107 1.51795205] #所有元素中最小值的索引 print(np.argmin(sample1)) #3 #所有元素中最大值的索引 print(np.argmax(sample1)) #1 #求平均值 print(np.mean(sample1)) #0.5122038951548865 print(sample1.mean()) #0.5122038951548865 #求中位数 print(np.median(sample1)) #0.4488021304789098 #求开方的结果 print(np.sqrt(sample1)) ''' [[0.41921543 0.97037057] [0.56482238 0.34479906] [0.96921211 0.76064443]] ''' sample4=np.random.randint(0,10,size=(1,10)) print(sample4) #[[9 8 1 6 1 1 1 1 8 5]] #排序 print(np.sort(sample4)) #[[1 1 1 1 1 5 6 8 8 9]] print(np.sort(sample1)) #对每一行进行排序 ''' [[0.17574158 0.94161903] [0.11888639 0.31902432] [0.57857994 0.93937211]] ''' #按条件改变元素值(小于2的变为2,大于7的变成7) print(np.clip(sample4,2,7)) #[[7 7 2 6 2 2 2 2 7 5]]
numpy的索引
import numpy as np arr1=np.arange(2,14) print(arr1) #[ 2 3 4 5 6 7 8 9 10 11 12 13] #索引从0开始 print(arr1[2]) #4 #前包后不包 print(arr1[1:4]) #[3 4 5] print(arr1[2:-1]) #[ 4 5 6 7 8 9 10 11 12] #前5个数据 print(arr1[:5]) #[2 3 4 5 6] #取最后两个数据 print(arr1[-2:]) #[12 13] #改变形式 arr2=arr1.reshape(3,4) print(arr2) ''' [[ 2 3 4 5] [ 6 7 8 9] [10 11 12 13]] ''' #取第一行数据(0行开始) print(arr2[1]) #[6 7 8 9] #第一行第一列(形式1) print(arr2[1][1]) #7 #第一行第二列(形式2) print(arr2[1,2]) #8 #所有行的第二列 print(arr2[:,2]) #[ 4 8 12] #for循环中迭代的是行 for i in arr2: print(i) ''' [2 3 4 5] [6 7 8 9] [10 11 12 13] ''' #使用转置迭代列 for i in arr2.T: print(i) ''' [ 2 6 10] [ 3 7 11] [ 4 8 12] [ 5 9 13] ''' #迭代每一个元素 for i in arr2.flat: print(i) ''' 2 3 4 5 6 7 8 9 10 11 12 13 '''
array合并
import numpy as np arr1=np.array([1,2,3]) arr2=np.array([4,5,6]) #垂直合并 arr3=np.vstack((arr1,arr2)) print(arr3) #[[1 2 3],[4 5 6]] print(arr3.shape) #(2, 3) #水平合并 arr4=np.hstack((arr1,arr2)) print(arr4) #[1 2 3 4 5 6] print(arr4.shape) #6 arrv=np.vstack((arr1,arr2,arr3)) print(arrv) #[[1 2 3],[4 5 6],[1 2 3],[4 5 6]] arrh=np.hstack((arr1,arr2,arr4)) print(arrh) #[1 2 3 4 5 6 1 2 3 4 5 6] arr=np.concatenate((arr1,arr2,arr1)) print(arr) #[1 2 3 4 5 6 1 2 3] #axis=0表示纵向合并 合并的array维度要相同,array形状要匹配 arr=np.concatenate((arr3,arrv),axis=0) print(arr) #[[1 2 3],[4 5 6],[1 2 3],[4 5 6],[1 2 3],[4 5 6]] #axis=1表示横向合并 合并的array维度要相同,array形状要匹配 arr=np.concatenate((arr3,arr3),axis=1) print(arr) #[[1 2 3 1 2 3],[4 5 6 4 5 6]] #一维的array不能转置 print(arr1.T) #[1 2 3] print(arr1.shape) #(3,) arr1_1=arr1[np.newaxis,:] print(arr1_1) #[[1 2 3]] print(arr1_1.shape) #(1, 3) print(arr1_1.T) #[[1],[2],[3]] arr1_2=arr1[:,np.newaxis] print(arr1_2) #[[1],[2],[3]] print(arr1_2.shape) #(3, 1) #变成2维数据 arr1_3=np.atleast_2d(arr1) print(arr1_3) #[[1 2 3]] print(arr1_3.T) #[[1],[2],[3]]
array分割
import numpy as np arr1=np.arange(12).reshape((3,4)) print(arr1) #[[ 0 1 2 3],[ 4 5 6 7],[ 8 9 10 11]] #水平方向分为2部分 arr2,arr3=np.split(arr1,2,axis=1) print(arr2) #[[0 1],[4 5],[8 9]] print(arr3) #[[ 2 3],[ 6 7],[10 11]] #垂直方向分为3份 arr4,arr5,arr6=np.split(arr1,3,axis=0) print(arr4) #[[0 1 2 3]] print(arr5) #[[4 5 6 7]] print(arr6) #[[ 8 9 10 11]] #水平方向分为3份--->不等分割 arr7,arr8,arr9=np.array_split(arr1,3,axis=1) print(arr7) #[[0 1],[4 5],[8 9]] print(arr8) #[[ 2],[ 6],[10]] print(arr9) #[[ 3],[ 7],[11]] #垂直分割 arrv1,arrv2,arrv3=np.vsplit(arr1,3) print(arrv1) #[[0 1 2 3]] print(arrv2) #[[4 5 6 7]] print(arrv3) #[[ 8 9 10 11]] #水平分割 arrh1,arrh2=np.hsplit(arr1,2) print(arrh1) #[[0 1],[4 5],[8 9]] print(arrh2) #[[ 2 3],[ 6 7],[10 11]]
numpy的浅拷贝和深拷贝
import numpy as np arr1=np.array([1,2,3]) arr2=arr1 #arr1和arr2共享同一块内存,浅拷贝 arr2[0]=5 print(arr1) #[5 2 3] print(arr2) #[5 2 3] #深拷贝 arr3=arr1.copy() arr3[0]=10 print(arr1) #[5 2 3] print(arr3) #[10 2 3]