1 # coding: utf-8 2 # numpy数组基础索引与切片 3 4 import numpy as np 5 arr = np.arange(10) 6 arr 7 8 # 数组下标从0开始 9 # 索引 10 arr[5] 11 # 切片 12 arr[5:8] 13 # 传入数值给数组切片 14 arr[5:8] = 12 15 arr 16 # 数组的切片是原数组的视图,任何对于视图的修改都会反映到原数组上 17 arr_slice = arr[5:8] 18 arr_slice 19 # 改变arr_slice,变化会体现在原数组上 20 arr_slice[1] = 12345 21 arr 22 23 # 不写切片值的[:]将会引用数组的所有值 24 arr_slice[:] = 64 25 arr 26 # 在二维数组中索引对应的值不再是一个值,而是一个一维数组,下标从0开始 27 arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) 28 arr2d[2] 29 # 获取单个元素值可以通过递归方式得到 两种方法 30 # 方法1 31 arr2d[0][2] 32 #方法2 33 arr2d[0, 2] 34 # 在多维数组中可以省略后续索引值,返回对象将是一个降低一个维度的数组 35 # 2x2x3的数组 36 arr3d = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]) 37 arr3d 38 # 返回2x3的数组 39 arr3d[0] 40 # 标量和数组都可以传递给arr3d[0] 41 old_values = arr3d[0].copy() 42 arr3d[0] = 42 43 arr3d 44 45 arr3d[0] = old_values 46 arr3d 47 #返回一维数组 48 arr3d[1, 0] 49 # 数组的切片索引 50 # 一维数组 51 arr 52 arr[1:6] 53 # 二维数组 54 arr2d 55 arr2d[:2] 56 # 多组切片 57 arr2d[:2, 1:] 58 # 选择第二行且只选择前两列 59 arr2d[1, :2] 60 # 选择第三列且只选择前两行 61 arr2d[:2, 2] 62 # 单独冒号表示选择整个轴上的数组 63 arr2d[:, :1] 64 # 对切片表达式赋值,整个切片都会重新赋值 65 arr2d[:2, 1:] = 0 66 arr2d 67 68 # 布尔索引 69 # 例1.假设数据都在数组中,数组中数据是一些重复的人名,将使用numpy.random中的randn函数生成一些随机正态分布的数据 70 names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe']) 71 names 72 data = np.random.randn(7, 4) 73 data 74 # 假设每个人名都和data数组中的一行相对应,我们想要选中所有'Bob'对应的行。 75 # 比较names数组和字符串数组'Bob'会产生一个布尔值数组 76 names == 'Bob' 77 # 在索引数组时可以传入布尔值数组 78 data[names == 'Bob'] 79 data[names == 'Bob', 2:] 80 data[names == 'Bob', 3] 81 82 # 为了选择除'Bob'以外的其他数据,可以使用!=或在条件表达式前使用~对条件取反 83 names != 'Bob' 84 data[~(names == 'Bob')] 85 86 # ~符号可以在你想要对一个通用条件进行取反时使用 87 cond = names == 'Bob' 88 data[~cond] 89 90 #当要选择三个名字中的两个时,可以对多个布尔值条件进行联合,使用 & 和 | 91 mask = (names == 'Bob')| (names == 'Will') 92 mask 93 data[mask] 94 95 # 设置布尔数组的值,将data 中所有负值设置为0 96 data[data < 0] = 0 97 data 98 99 # 利用一维布尔值数组对每一行设置数值 100 data[names != 'Joe'] = 7 101 data 102 103 # 神奇索引,用于描述使用整数数组进行数据索引 104 # 有一个8x4的数组 105 arr = np.empty((8,4)) 106 for i in range(8): 107 arr[i] = i 108 arr 109 110 # 选出符合特定顺序的子集 111 arr[[4, 3, 0, 6]] 112 113 # 使用负索引,从尾部进行选择 114 arr[[-3, -5, -7]] 115 116 arr = np.arange(32).reshape((8, 4)) 117 arr 118 119 # 传递多个索引时,根据每个索引元组对应的元素选出一个一维数组 120 arr[[1, 5, 7, 2],[0, 3, 1, 2]] 121 122 arr[[1, 5, 7, 2]][:, [0, 3, 1, 2]] 123 124 125 # 数组转置和换轴 126 # 数组的T属性 127 arr = np.arange(15).reshape((3, 5)) 128 arr 129 arr.T 130 131 # 计算矩阵内积np.dot 132 arr = np.random.randn(6, 3) 133 arr 134 np.dot(arr.T, arr) 135 136 # 对于高维数组,transpose方法可以接受包含轴编号的元组,用于置换轴 137 arr = np.arange(16).reshape((2, 2, 4)) 138 arr 139 140 # 原先的第二个轴变为第一个,第一个变为第二个轴 141 arr.transpose((1, 0, 2)) 142 143 # swapaxes方法,接收一对轴编号作为参数,并对轴进行调整用于重组数据 144 arr 145 arr.swapaxes(1, 2)
参考书籍:利用 python 进行数据分析
作者:舟华520
出处:https://www.cnblogs.com/xfzh193/
本文以学习,分享,研究交流为主,欢迎转载,请标明作者出处!