矩阵NumPy
安装: pip install numpy
pip install numpy -i https://pypi.douban.com/simple 豆瓣镜像下载
常量:
np.pi π
创建矩阵数组
1 import numpy as np 2 # array=np.array([[1,2,3],[5,6,7]]) #定义一个2行3列的矩阵数组.2行=2维 3 # print(array.ndim) #返回矩阵数组的维数 4 # print(array.shape) #返回矩阵数组的维数和列数。(2, 3) 5 # print(array.size) #返回矩阵数组的元素总个数 6 # 7 # array1=np.array([[1,2,3],[5,6,7]],dtype=np.int) #定义一个矩阵数组 8 # #dtype 指定每个元素的数据类型 可选 9 # print(array1.dtype) #返回元素的数据类型。int32 10 # array2=np.zeros((3,4)) #定义一个元素值都是0,3行4列的矩阵数组 11 # print(array2) 12 # array3=np.ones((3,4)) #定义一个元素值都是1,3行4列的矩阵数组
#参数2 可选dtype="uint8" 指定每个数据的类型,默认浮点型
13 # print(array3) 14 #array4=np.empty((3,4)) #定义一个元素值都是空,3行4列的矩阵数组 15 #空 值非常接近0 6.23042070e-307 16 #print(array4) 17 #array5=np.arange(10,20,2) #定义一个一维n列矩阵数组 18 #参数1 参数2 数据范围 19 # 参数3 步长值 [10 12 14 16 18] 20 #print(array5) 21 # array6=np.arange(10,33,2).reshape((3,4)) #定义一个3行4列的有序矩阵数组 22 # print(array6) 23 #array7=np.linspace(1,10,5) #定义一个一维数组 24 #元素值是:在1到10之间平均分成5个点。注意包括10 25 #[ 1. 3.25 5.5 7.75 10. ] 26 #print(array7) 27 array8=np.linspace(1,10,6).reshape((2,3)) #定义一个2行3列的矩阵数组 28 print(array8)
i=np.zeros([4,6,3],np.uint8) #元素值都是0,产生4个表,每个表是6行3列 np.uint8是数据类型
wave_data.shape = -1, 2 # 修改矩阵的维度 #-1 表示行自动处理; 2表示2列
np.random.rand() 返回一个或一组服从“0~1”均匀分布的随机样本值。随机样本取值范围是[0,1),不包括1
矩阵数组的运算:
矩阵乘法:
只有在第一个矩阵的列数和第二个矩阵的行数相同时才有意义
1 import numpy as np 2 a=np.array([1,2,3,4]) 3 b=np.arange(10,17,2) 4 x=np.array([[1,2],[10,20]]) 5 y=np.arange(10,17,2).reshape((2,2)) 6 z=np.array([[1,2,3],[10,20,30]]) 7 c=a-b #两个矩阵数组对应元素分别进行计算 8 c=a**2 9 c=np.sin(a) 10 c=a<3 #[ True True False False] 11 c=x*y #两个矩阵数组对应元素分别进行计算 12 d=np.dot(x,y) #矩阵乘法[看上面的图] 13 d=x.dot(y) #矩阵乘法 14 15 c=np.random.random((2,3)) #产生一个2行3列的随机数矩阵 16 #每个元素的随机数在0到1之间 17 c=np.min(x) #找出最小元素的值 18 c=np.max(x) #找出最大元素的值 19 c=np.sum(z,axis=1) #每一行求和 [ 6 60] 20 c=np.sum(z,axis=0) #每一列求和.[11 22 33] 21 c=np.argmin(a) #最小值的索引 22 c=np.argmax(z) #最大值的索引 23 c=np.average(z) #求全部元素的平均值 24 c=np.median(z) #找出中位数 25 #中位数:将数据按照从小到大或从大到小的顺序排列,如果数据个数是奇数,则处于最中间位置的数就是这组数据的中位数;如果数据的个数是偶数,则中间两个数据的平均数是这组数据的中位数 26 c=np.cumsum(z) #返回各元素与前面元素累加后的一维矩阵。[ 1 3 6 16 36 66] 27 z=np.array([[100,2,3],[10,20,30]]) 28 c=np.diff(z) #各维 后列减去前列后 的矩阵。[[-98 1] [ 10 10]] 29 z=np.array([[100,0,3],[10,20,30]]) 30 c=np.nonzero(z) #找出非0元素的位置 31 #(array([0, 0, 1, 1, 1], dtype=int64), array([0, 2, 0, 1, 2], dtype=int64)) 32 #第一个数组是非0元素的行索引,第二个数组是非0元素的列索引 33 d=np.transpose(c) #通过行列转换,返回相应的位置矩阵。[[0 0] [0 2] [1 0] [1 1] [1 2]] 34 # 注意参数c的值 35 d=z[c] #找出相应位置元素的一维矩阵。[100 3 10 20 30] 36 #注意参数c的值 c是位置元组 37 c=np.sort(z) #对各维分别进行排序-升序。[[ 0 3 100] [ 10 20 30]] 38 z=np.array([[100,2,3,50],[10,20,30,15],[35,86,74,14]]) 39 c=np.transpose(z) #行列转换,行变成列,列变成行 40 # [[100 10] [ 0 20] [ 3 30]] 41 c=z.T #与np.transpose(z)相同 42 c=np.clip(z,5,9)#矩阵z中小于5的元素都等于5,大于9的元素都等于9 43 #参数2 最小值;参数3 最大值 44 z=np.array([[10,2,3,50],[10,20,30,15]]) 45 c=np.mean(z) #求所有元素的平均值 46 c=z.mean() #求所有元素的平均值 47 c=np.mean(z,axis=1) #各行求平均值。[16.25 18.75] 48 c=np.mean(z,axis=0) #各列求平均值。[10. 11. 16.5 32.5] 49 c=a[1] #返回一维矩阵索引号对应的值.3 50 c=z[1] #多维矩阵就返回行索引对应的矩阵。[10 20 30 15] 51 c=z[1][1] #返回第一行第一列的值 52 c=z[1,1] #返回第一行第一列的值 53 c=z[1,:] #返回第一行的所有元素。[10 20 30 15] 54 # : 代表所有 55 c=z[:,1] #返回第一列的所有元素。[ 2 20] 56 c=z[1,1:3] #返回第一行的1到3的元素。 57 #注意 顾头不顾尾 58 c=z[0:1,1] #返回第一列的0到1的元素 59 z=np.array([[10,2,3,50],[10,20,30,15],[100,500,200,800]]) 60 for r in z: #每次返回一行 61 #print(r) 62 pass 63 for r in z.T: #每次返回一列 64 #print(r) 65 pass 66 c=z.flat #把矩阵转换成一维迭代器 67 c=z.flatten() #把矩阵转换成一维矩阵 68 for i in z.flat: #每次返回一个元素 69 #print(i) 70 pass 71 a=np.array([[1,2,3,4],[60,20,90,10]]) 72 b=np.array([[500,200,800,444],[2,2,2,2]]) 73 c=a.shape #返回多维矩阵的行数和列数。(2, 4) 74 c=b.shape #返回一维矩阵的列数.(4,) 75 c=np.vstack((a,b)) #合拼成一个矩阵 76 #以行为单位,按行顺序排列 77 c=np.hstack((a,b)) #合拼成一个矩阵 78 #以行为单位,按列顺序排列 79 x=np.array([3,8,4,9]) 80 y=np.array([[5,6,7,8],[10,30,90,50],[500,200,800,444]]) 81 c=y[:,np.newaxis] #多维给每行加一层行嵌套 82 c=x[:,np.newaxis] #一维给每个元素加一层行嵌套。一行n列变成n行1列 83 c=x[np.newaxis,:] 84 d=y[np.newaxis,:] #给矩阵加一个行总嵌套 85 x=np.array([[3,8,4,9],[500,200,800,444]]) 86 y=np.array([[5,6,7,8],[10,30,90,50]]) 87 c=np.concatenate((x,y,x),axis=0) #合拼成一个矩阵 88 #以行为单位,按行顺序排列 89 c=np.concatenate((x,y,x),axis=1) #合拼成一个矩阵 90 #以行为单位,把每列合拼成一行 91 y=np.array([[5,6,7,8],[10,30,90,50],[500,200,800,444],[1,2,3,4]]) 92 c=np.split(y,2,axis=0) #分割矩阵【必须均等分】 93 #把矩阵分层2个 94 #axis=0 以行分割; 95 # axis=1 以列分割 [array([[ 5, 6],[ 10, 30],[500, 200],[ 1, 2]]), array([[ 7, 8],[ 90, 50],[800, 444],[ 3, 4]])] 96 c=np.split(y,2,axis=1) 97 c=np.array_split(y,3,axis=0) #分割矩阵【可以不均等分】 98 c=np.vsplit(y,2) #跟np.split(y,2,axis=0)相同 99 c=np.hsplit(y,2) #跟np.split(y,2,axis=1)相同 100 a=np.arange(4) 101 b=a #把a的地址给b 102 c=a 103 d=b 104 a[0]=11 #修改某元素的数据【注意 数据的类型】 105 a[1:3]=[22,33] #修改第一项到第三项的数据。顾头不顾尾 106 e=b is a 107 b=a.copy() #把a的值给b 108 a[0]=100 109 print(a) 110 print(b) 111 112 print(id(a),id(b))
排序:
1 import numpy as np 2 z=np.array([[100,0,3],[10,20,30]]) 3 c=np.sort(z,axis=1) #对各维分别进行排序-升序。[[ 0 3 100] [ 10 20 30]] 4 print(c) 5 c=np.sort(z,axis=0) #对各列分别进行排序-升序 [[ 10 0 3] [100 20 30]] 6 c=np.argsort(z,axis=1) #返回 各维按升序排序所处的位置。[[1 2 0] [0 1 2]] 7 c=np.argsort(z,axis=0) #返回 各列按升序排序所处的位置。[[1 0 0] [0 1 1]] 8 a=[1,5,1,4,3,4,4] 9 b=[9,4,0,4,0,2,1] 10 c=np.lexsort((b,a))
s=q[:-1] 去掉最后一个数据
q = np.arange(36)
s = q.reshape(6,6) #更改数组形状,变成6行6列
s = q.reshape(6,3,2) #更改数组形状
#总的分层6块,每块3行2列
s = q.reshape(-1,3,2) #更改数组形状
# -1表示不知-自动处理,每块3行2列
arr2[::2,::2] #设置步长为2
e=np.any(s) == True #s数据表中只要有一个数据是True就返回True
e=np.all(s) == True #s数据表中所有数据都是True就返回True
import numpy as np a=np.array([[1,2,3],[5,6,7]]) #定义一个2行3列的矩阵数组 b=np.array([[10,20,30],[50,60,70]]) x=np.c_[a, b] #把a、b矩阵的各对应行连接在一起
#行数不变,列数增加
print(a) print(b) print(x)
效果图:
import numpy as np a=np.array([[1,2,3],[5,6,7]]) #定义一个2行3列的矩阵数组 b=np.array([[10,20,30],[50,60,70]]) x=np.r_[a, b] #把a、b矩阵连接在一起 #行数增加,列数不变 print(a) print(b) print(x)
效果图:
import wave import matplotlib.pyplot as plt import numpy as np f = wave.open('D:/驿动的心.wav', 'rb') params = f.getparams() #获取音频信息 nchannels ,sampwidth ,framerate ,nframes = params [:4] strData = f.readframes(nframes) waveDate = np.frombuffer(buffer=strData,dtype=np.int16,count=-1,offset=0) #从缓冲区读取数据 #【把二进制数据转换成其它类型数据】 #返回值类型:返回解释缓冲区后生成的 ndarray 对象 #参数buffer:要解释为数组的缓冲区对象,可以是对象的字符串、buffer接口实例或类似对象 #参数dtype(可选):返回数组的数据类型。默认值为float #参数count(可选):要解释的元素数量。默认值为 -1,表示解释整个缓冲区。 #参数offset(可选):缓冲区中的偏移量,即从哪个位置开始解释。默认值为 0 #看:https://baijiahao.baidu.com/s?id=1769775972434594235&wfr=spider&for=pc
ndarray看:https://blog.csdn.net/wyy22752387/article/details/131205710