垂直拆分:numpy.vsplit(数组,份数)->(数组片段) import numpy as np c = np.arange(1,13).reshape(6,2) c array([1,2],[3,4],[5,6],[7,8],[9,10],[11,12]) np.vsplit(c,3) [array([[1,2],[3,4],])array([[5,6],[7,8]])array([[9,10],[11,12]])] 水平拆分:numpy.hsplit(数组,份数)->(数组片段) d =c.T d array([[1,3,5,7,9,11],[2,4,6,8,10,12]]) array([[1, 3],[2, 4]]), array([[5, 7],[6, 8]]), array([[ 9, 11],[10, 12]]) numpy.dsplit(数组,份数)->(数组片段) import numpy as np e = np.dstack((a, b)) e array([[[11, 21],[12, 22],[13, 23]],[[14, 24],[15, 25],[16, 26]],[[17, 27],[18, 28],[19, 29]]]) np.dsplit(e, 2) Out[35]: [array([[[11],[12],[13]],[[14],[15],[16]],[[17],[18],[19]]]), array([[[21],[22],[23]],[[24],[25],[26]],[[27],[28],[29]]])] 灵活选择引用 inistate =np.array([1,2,3,4]) pre_inistate = inistate[0:3] pre_inistate array([0.18257419, 0.36514837, 0.54772256]) numpy基本加减和取行操作 import numpy as np a = np.array([1,1,1,1]) b = np.array([[1],[1],[1],[1]]) a+b array([[2, 2, 2, 2], [2, 2, 2, 2], [2, 2, 2, 2], [2, 2, 2, 2]]) c = np.array([[1,1,1,1]]) c+b array([[2, 2, 2, 2], [2, 2, 2, 2], [2, 2, 2, 2], [2, 2, 2, 2]]) W = np.array([[1,1,1],[2,2,2]]) W[:,1] array([1, 2]) W[1] array([2, 2, 2]) W[:,1] = np.array([5,5]) W array([[1, 5, 1], [2, 5, 2]]) delete()函数 import numpy as np matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] p1 = np.delete(matrix, 1, 0) # 第0维度(行)第1行被删除(初始行为0行) print(’>>>>p1>>>>\n’,p1) p2 = np.delete(matrix, 1, 1) # 第1维度(列)第1行被删除 print(’>>>>p2>>>>\n’,p2) p3 = np.delete(matrix, 1) # 拉平后删除第1个元素(初始为第0个) print(’>>>>p3>>>>\n’,p3) p4 = np.delete(matrix, [0,1], 1) # 第1维度(列)第0、1行被删除 print(’>>>>p4>>>>\n’,p4) 结果: p1>>>> [[ 1 2 3 4] [ 9 10 11 12]] p2>>>> [[ 1 3 4] [ 5 7 8] [ 9 11 12]] p3>>>> [ 1 3 4 5 6 7 8 9 10 11 12] p4>>>> [[ 3 4] [ 7 8] [11 12]] insert()函数 import numpy as np matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] q1 = np.insert(matrix, 1, [1,1,1,1], 0) # 第0维度(行)第1行添加[1,1,1,1] print(’>>>>q1>>>>\n’,q1) q2 = np.insert(matrix, 0, [1,1,1], 1) # 第1维度(列)第0列添加1,1,1 print(’>>>>q2>>>>\n’,q2) q3 = np.insert(matrix, 3, [1,1,1,1], 0) # 第0维度(行)第3行添加[1,1,1,1] print(’>>>>q3>>>>\n’,q3) 结果 q1>>>> [[ 1 2 3 4] [ 1 1 1 1] [ 5 6 7 8] [ 9 10 11 12]] q2>>>> [[ 1 1 2 3 4] [ 1 5 6 7 8] [ 1 9 10 11 12]] q3>>>> [[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12] [ 1 1 1 1]] append()函数 import numpy as np matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] m1 = np.append(matrix,[[1,1,1,1]],axis=0) print(’>>>>m1>>>>\n’,m1) m2 = np.append(matrix,[[1],[1],[1]],axis=1) print(’>>>>m2>>>>\n’,m2) m3 = np.append(matrix,[1,1,1,1]) print(’>>>>m3>>>>\n’,m3) 结果 m1>>>> [[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12] [ 1 1 1 1]] m2>>>> [[ 1 2 3 4 1] [ 5 6 7 8 1] [ 9 10 11 12 1]] m3>>>> [ 1 2 3 4 5 6 7 8 9 10 11 12 1 1 1 1] np.random.choice(a, size, replace, p) import numpy as np a1 = np.random.choice(7,5) # 从0~7中随机选择5个数组成一维数组 a1 array([3, 1, 0, 1, 4]) a2 = np.random.choice([0,1,2,3,4,5,6],5) # 从给定list中随机选择5个数组成一维数组 a2 array([1, 6, 6, 6, 4]) a3 = np.random.choice(np.array([0,1,2,3,4,5,6]),5) # 将list换成array数组依然可以运行,效果一致 a3 array([3, 0, 5, 5, 3]) a4 = np.random.choice([0,1,2,3,4,5,6],5,replace=False) # 上述均有重复,将replace设置为False,即可按要求没有重复的选取 a4 array([0, 4, 3, 6, 5]) a5 = np.random.choice(np.array([0,1,2,3,4,5,6]),5,p=[0.1,0.1,0.1,0.1,0.1,0.1,0.4]) a5 array([6, 3, 2, 6, 6]) np.argmax(a, axis=None, out=None) import numpy as np a = np.array([[1,1,1],[2,2,2],[0,3,6]]) a array([[1, 1, 1], [2, 2, 2], [0, 3, 6]]) b1 = np.argmax(a) # 将数组a拉平,最大值索引为9(初始索引为0) b1 8 b2 = np.argmax(a, axis=0) # 按列选取最大值的索引 b2 array([1, 2, 2], dtype=int64) b3 = np.argmax(a, axis=1) # 按行选取最大值的索引 b3 array([0, 0, 2], dtype=int64) 星号(*)的作用 import numpy as np y1 = np.linspace(-10.0,10.0) # 默认生成50个数据 y1 array([-10. , -9.59183673, -9.18367347, -8.7755102 , -8.36734694, -7.95918367, -7.55102041, -7.14285714, -6.73469388, -6.32653061, -5.91836735, -5.51020408, -5.10204082, -4.69387755, -4.28571429, -3.87755102, -3.46938776, -3.06122449, -2.65306122, -2.24489796, -1.83673469, -1.42857143, -1.02040816, -0.6122449 , -0.20408163, 0.20408163, 0.6122449 , 1.02040816, 1.42857143, 1.83673469, 2.24489796, 2.65306122, 3.06122449, 3.46938776, 3.87755102, 4.28571429, 4.69387755, 5.10204082, 5.51020408, 5.91836735, 6.32653061, 6.73469388, 7.14285714, 7.55102041, 7.95918367, 8.36734694, 8.7755102 , 9.18367347, 9.59183673, 10. ]) y2 = np.linspace(1,10,10) # 生成10个数据,包括首尾 y2 array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.]) y3 = np.linspace(1,10,10,endpoint=False) # 不包括尾部数据 y3 array([1. , 1.9, 2.8, 3.7, 4.6, 5.5, 6.4, 7.3, 8.2, 9.1]) y4= np.linspace(1, 10, 6, retstep=True) # 将步长与结果的数组放入一个list、 y4 (array([ 1. , 2.8, 4.6, 6.4, 8.2, 10. ]), 1.8) 拉平操作 ravel()和faltten()及reshape(1,-1)的区别联系(补充[None,:]操作) import numpy as np x = np.array([[1,2,3],[4,5,6],[1,2,3]]) x.flatten() array([1, 2, 3, 4, 5, 6, 1, 2, 3]) # 拉平 x.ravel() array([1, 2, 3, 4, 5, 6, 1, 2, 3]) x.ravel(‘F’) array([1, 4, 1, 2, 5, 2, 3, 6, 3]) # 按列拉平 x.flatten(‘F’) array([1, 4, 1, 2, 5, 2, 3, 6, 3]) x.flatten()[1] = 20 x array([[1, 2, 3], [4, 5, 6], [1, 2, 3]]) x.ravel()[1] = 20 x array([[ 1, 20, 3], [ 4, 5, 6], [ 1, 2, 3]]) x.reshape(1,-1) # 注意结果仍然是二维 array([[1, 2, 3, 4, 5, 6, 1, 2, 3]]) # 这里有两个方括号 x = np.array([1,2,3,6,7,8]) # 注意操作的是数组,即原x是数组 ***>>> x[None,:] # 转成行向量(二维矩阵) array([[1, 2, 3, 6, 7, 8]]) x[:,None] # 转成列向量(二维矩阵)*** array([[1], [2],[3],[6],[7],[8]]) x[np.newaxis, :] # np.newaxis与None用法一致 array([[1, 2, 3, 6, 7, 8]]) np.prod() 计算元素乘积 x = np.array([[1,2,3],[2,3,4]]) np.prod(x) 144 np.prod(x,axis=1) array([ 6, 24]) np.prod(x,axis=0) array([ 2, 6, 12]) 把矩阵大于或小于N的元素置M的技巧 import numpy as np x = np.array([[1,2,3],[-3,2,4],[5,-2,9]]) x array([[ 1, 2, 3], [-3, 2, 4], [ 5, -2, 9]]) y1 = np.maximum(0,x) # 把小于0的元素置0,比改变x的值 y1 array([[1, 2, 3], [0, 2, 4], [5, 0, 9]]) y2 = np.minimum(0,x) # 把大于0的元素置0,不改变x的值 y2 array([[ 0, 0, 0], [-3, 0, 0], [ 0, -2, 0]]) x1 = x.copy() x1 array([[ 1, 2, 3], [-3, 2, 4], [ 5, -2, 9]]) x1[x1 < 0] = 0 # 把小于0的元素置0,改变x1的值 x1 array([[1, 2, 3], [0, 2, 4], [5, 0, 9]]) x2 = x.copy() x2[x2 > 0] = 0 # 把大于0的元素置0,改变x2的值 x2 array([[ 0, 0, 0], [-3, 0, 0], [ 0, -2, 0]]) numpy中的矩阵copy问题 import numpy as np x = np.array([[1,2,3],[-3,2,4],[5,-2,9]]) x array([[ 1, 2, 3], [-3, 2, 4], [ 5, -2, 9]]) x1 = x.copy() # copy(),开辟新地址 x1[x1 > 0] = 0 x1 array([[ 0, 0, 0], [-3, 0, 0], [ 0, -2, 0]]) x # x不变 array([[ 1, 2, 3], [-3, 2, 4], [ 5, -2, 9]]) x2 = x # 直接等于,未开辟新地址,x2与x相关联 x2 array([[ 1, 2, 3], [-3, 2, 4], [ 5, -2, 9]]) x2[x2>0] = 0 x2 array([[ 0, 0, 0], [-3, 0, 0], [ 0, -2, 0]]) x # x也改变 array([[ 0, 0, 0], [-3, 0, 0], [ 0, -2, 0]]) x = np.array([[1,2,3],[-3,2,4],[5,-2,9]]) x3 = x[2] # 取x的第3行 x3 array([ 5, -2, 9]) x3[2] = 100 # 将x3第3个元素置100 x # x中对应的元素置也被置成100了 array([[ 1, 2, 3], [ -3, 2, 4], [ 5, -2, 100]]) np.zeros_like()构造全零矩阵,无需指定大小 import numpy as np x = np.array([[1,2,3],[4,5,6]]) np.zeros_like(x) # 生成一个和x大小相同的全零矩阵 array([[0, 0, 0], [0, 0, 0]]) 1 2 3 4 5 产生随机浮点数 import numpy as np n = np.random.rand(3,4) n array([[0.11502462, 0.3503468 , 0.6206656 , 0.35172063], [0.66367565, 0.10195004, 0.22708003, 0.9318615 ], [0.77946053, 0.81804715, 0.2272248 , 0.17736476]]) np.random.randn() 生成正太分布矩阵 import numpy as np x = np.random.randn(2,3) x array([[-0.09382672, -0.97939614, 0.0222352 ], [ 0.15060188, -0.01107968, 1.08374427]]) y = np.multiply(0.1,np.random.randn(2,3))+0.5 # 一般正太分布 y array([[0.49305173, 0.36802044, 0.48699281], [0.45197275, 0.53837051, 0.60022348]]) np.randm.randint() 生成离散均匀分布的整数值组成的矩阵 import numpy as np z = np.random.randint(2,9,(2,3)) z array([[2, 3, 6], [8, 2, 8]]) m = np.random.randint(9,size = (2,3)) m array([[4, 0, 2], [5, 2, 8]]) python 断言 assert x = ‘You are right’ type(x) <class ‘str’> assert type(x)==str, ‘x is not str’ x = [1,2,3] type(x) <class ‘list’> assert type(x)==str, ‘x is not str’ Traceback (most recent call last): File “”, line 1, in AssertionError: x is not str np.pad()函数进行padding操作 import numpy as np A = np.arange(95,99).reshape(2,2) A array([[95, 96], [97, 98]]) np.pad(A,((3,2),(2,3)),‘constant’,constant_values = (0,0)) array([[ 0, 0, 0, 0, 0, 0, 0], [ 0, 0, 0, 0, 0, 0, 0], [ 0, 0, 0, 0, 0, 0, 0], [ 0, 0, 95, 96, 0, 0, 0], [ 0, 0, 97, 98, 0, 0, 0], [ 0, 0, 0, 0, 0, 0, 0], [ 0, 0, 0, 0, 0, 0, 0]]) 说明: 在矩阵行的上部分添加3行,下部分添加2行,在列的左部分添加2列,右部分添加3列。 b = np.array([[[1,2],[3,4]],[[3,4],[7,8]],[[4,5],[1,2]]]) b array([[[1, 2], [3, 4]], [[3, 4], [7, 8]], [[4, 5], [1, 2]]]) 1 2 3 4 5 np.pad(b, ((0,0),(1,1),(1,1)), ‘constant’, constant_values = 0) array([[[0, 0, 0, 0], [0, 1, 2, 0], [0, 3, 4, 0], [0, 0, 0, 0]], [[0, 0, 0, 0], [0, 3, 4, 0], [0, 7, 8, 0], [0, 0, 0, 0]], [[0, 0, 0, 0], [0, 4, 5, 0], [0, 1, 2, 0], [0, 0, 0, 0]]]) numpy.empty() 创建指定形状和数据类型且未初始化的数组 import numpy as np x = np.empty([3,2], dtype = int) print (x) 输出: [[ 6917529027641081856 5764616291768666155] [ 6917529027641081859 -5764598754299804209] [ 4497473538 844429428932120]] np.full 用于形成元素全为某元素的矩阵 import numpy as np c = np.array([[1,2],[3,4]]) c array([[1, 2], [3, 4]]) c.astype(np.float32) array([[1., 2.], [3., 4.]], dtype=float32) np.meshgrid() 快速生成网格 import numpy as np x = np.array([1,3,5]) y = np.array([4,6]) XX,YY = np.meshgrid(x,y) XX array([[1, 3, 5], [1, 3, 5]]) YY array([[4, 4, 4], [6, 6, 6]]) np.hstack() 和 np.vstack() 用于堆叠矩阵 import numpy as np x = np.array([[3,4,5],[1,3,4]]) y = np.array([[1,1,1],[2,2,2]]) np.hstack((x,y)) # 水平堆叠 array([[3, 4, 5, 1, 1, 1], [1, 3, 4, 2, 2, 2]]) np.vstack((x,y)) # 竖直堆叠 array([[3, 4, 5], [1, 3, 4], [1, 1, 1], [2, 2, 2]]) numpy 取整 import numpy as np a = np.array([0.125,0.568,5.688]) np.round(a) # 四舍五入取整, np.around 和 round 用法一致 array([0., 1., 6.]) np.round(a,decimals = 2) # 四舍五入保留2位小数 array([0.12, 0.57, 5.69]) np.floor(a) # 向下取整 array([0., 0., 5.]) np.ceil(a) # 向上取整 array([1., 1., 6.]) np.newaxis 在特定位置增加一个维度 import numpy as np c = np.array([1,2,5,4]) c[:,np.newaxis] array([[1],[2],[5],[4]]) c[np.newaxis,:] array([[1, 2, 5, 4]]) python 广播机制 import numpy as np a = np.array([[1,2,3],[4,5,6]]) a = np.array([[1,2,3,6],[4,5,6,6]]) a1 = a.reshape((1,2,4)) a1 array([[[1, 2, 3, 6], [4, 5, 6, 6]]]) b = np.array([[3,4,5,6],[1,2,3,4],[4,5,5,5]]) b array([[3, 4, 5, 6], [1, 2, 3, 4], [4, 5, 5, 5]]) b1 = b.reshape((1,3,4)).transpose((1,0,2)) b1 array([[[3, 4, 5, 6]], [[1, 2, 3, 4]], [[4, 5, 5, 5]]]) 1 2 3 a1 array([[[1, 2, 3, 6], [4, 5, 6, 6]]]) a1+b1 array([[[ 4, 6, 8, 12], [ 7, 9, 11, 12]], [[ 2, 4, 6, 10], [ 5, 7, 9, 10]], [[ 5, 7, 8, 11], [ 8, 10, 11, 11]]]) 将 a1 扩展成 [3,2,4] 成 [[[1, 2, 3, 6], [4, 5, 6, 6]], [[1, 2, 3, 6], [4, 5, 6, 6]], [[1, 2, 3, 6], [4, 5, 6, 6]]] 将 b1 扩展成 [3,2,4] 成 [[[3, 4, 5, 6], [3, 4, 5, 6]], [[1, 2, 3, 4], [1, 2, 3, 4]], [[4, 5, 5, 5], [4, 5, 5, 5]]] 扩展后的 a1 和 b1 相加得到 [[ 4, 6, 8, 12], [ 7, 9, 11, 12]], [[ 2, 4, 6, 10], [ 5, 7, 9, 10]], [[ 5, 7, 8, 11], [ 8, 10, 11, 11]]] numpy.transpose()转置 c = np.array([[[1,2,5],[3,4,6]],[[4,5,6],[7,8,9]]]) c array([[[1, 2, 5], [3, 4, 6]], [[4, 5, 6], [7, 8, 9]]]) c.transpose(1,0,2) # 将c的维度按照 第1维度,第0维度,第2维度的排序排成 第0,1,2维度 array([[[1, 2, 5], [4, 5, 6]], [[3, 4, 6], [7, 8, 9]]]) 1 2 如原来的 4 (4,5,6的4)本是 (1,0,0), 转换后变为 (0,1,0) c.transpose(1,2,0) # 将c的维度按照 第1维度,第2维度,第0维度的排序排成 第0,1,2维度 array([[[1, 4], [2, 5], [5, 6]],[[3, 7], [4, 8],[6, 9]]]) numpy 中双冒号的用法 import numpy as np a = np.array([2,2,3,4,5,5,6,7]) a[0:7:2] array([2, 3, 5, 6]) stop 值是默认尾部 import numpy as np a = np.array([2,2,3,4,5,5,6,7]) a[0::2] array([2, 3, 5, 6]) [::-1] 来将序列按倒序排列 a[::-1] array([7, 6, 5, 5, 4, 3, 2, 2]) python 的内置函数slice(start, stop, step) import numpy as np a = np.array([2,2,3,4,5,5,6,7]) s = slice(0,7,2) a[s] array([2, 3, 5, 6])
焦海洋的Numpy作业
最新推荐文章于 2022-04-16 18:29:52 发布
本文详细介绍了Numpy库中用于数组操作的方法,包括垂直拆分vsplit、水平拆分hsplit、深度拆分dsplit,以及加减操作、矩阵转置、索引选择、插入、删除、append函数的使用。同时,还讲解了random.choice、argmax函数、广播机制以及数组的转置和切片操作,深入理解这些方法对于高效处理numpy数组至关重要。
摘要由CSDN通过智能技术生成