1、通过内置的 函数进行切片
>>> import numpy as np
>>> a = np.arange(10)
>>> s = slice(2,7,2) # 从索引 2 开始到索引 7 停止,间隔为2
>>> a[s]
array([2, 4, 6])
>>> np.arange(10)[slice(2,7,2)]
array([2, 4, 6])
2、直接通过 进行切片,用法同Python对List的操作,这里不再重复
一维数组
>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> a[2:7:2]
array([2, 4, 6])
多维数组
>>> b = np.array([[1,2,3],[3,4,5],[4,5,6]])
>>> b
array([[1, 2, 3],
[3, 4, 5],
[4, 5, 6]])
>>> b[1]
array([3, 4, 5])
3、多维数组 还可以 使用 来进行切片
... 代表行或列的全部元素
>>> b = np.array([[1,2,3],[3,4,5],[4,5,6]])
array([[1, 2, 3],
[3, 4, 5],
[4, 5, 6]])
''' 第二列 '''
>>> b[...,1]
array([2, 4, 5])
''' 第二行 '''
>>> b[1,...]
array([3, 4, 5])
''' 所有行的第二列至最后一列元素'''
>>> b[...,1:]
array([[2, 3],
[4, 5],
[5, 6]])
''' [...,...]是不可取的 '''
>>> b[...,...]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: an index can only have a single ellipsis ('...')
4、高级索引
4.1、整数数组索引
先要确定需要获取的元素的索引,将行索引和列索引分别组合在一起即可
获取数组中(0,0),(1,1)和(2,0)位置处的元素,那行就应该是[0,1,2],列是[0,1,0]
>>> x = np.array([[1, 2], [3, 4], [5, 6]])
>>> x
array([[1, 2],
[3, 4],
[5, 6]])
>>> x[[0,1,2], [0,1,0]]
array([1, 4, 5])
单独获取行和列,再合并
>>> x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]])
>>> x
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])
>>> rows = np.array([[0,0],[3,3]])
>>> rows
array([[0, 0],
[3, 3]])
>>> cols = np.array([[0,2],[0,2]])
>>> cols
array([[0, 2],
[0, 2]])
>>> x[rows,cols]
array([[ 0, 2],
[ 9, 11]])
借助切片 : 或 … 与索引数组组合
>>> a = np.array([[1,2,3], [4,5,6],[7,8,9]])
>>> a
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> a[1:3, 1:3]
array([[5, 6],
[8, 9]])
>>> a[1:3,[1,2]]
array([[5, 6],
[8, 9]])
4.2、布尔索引
通过布尔运算(如:比较运算符)来获取符合指定条件的元素的数组
保留大于5的元素
>>> a = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]])
>>> a
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])
>>> a[a > 5 ]
array([ 6, 7, 8, 9, 10, 11])
去掉NaN元素
''' 一维数组 '''
a = np.array([np.nan,1,2,np.nan,3,4,5])
>>> a
array([nan, 1., 2., nan, 3., 4., 5.])
>>> a[~np.isnan(a)]
array([1., 2., 3., 4., 5.])
''' 二维数组 '''
>>> a = np.array([[np.nan,1,2],[np.nan,4,5]])
>>> a
array([[nan, 1., 2.],
[nan, 4., 5.]])
>>> a[~np.isnan(a)]
array([1., 2., 4., 5.])
保留值复数的元素
>>> a = np.array([1, 2+6j, 5, 3.5+5j])
>>> a[np.iscomplex(a)]
array([2. +6.j, 3.5+5.j])
结果会生成一个满足比较条件后的元素组成的一维数组
4.3、花式索引
根据索引数组的值作为目标数组的某个轴的下标来取值。对于使用一维整型数组作为索引,如果目标是一维数组,那么索引的结果就是对应位置的元素;如果目标是二维数组,那么就是对应下标的行
提取数组的第4,2,1,7行,结果会生成一个4行列数和原数组相同的数组。
>>> x=np.arange(32).reshape((8,4))
>>> x
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23],
[24, 25, 26, 27],
[28, 29, 30, 31]])
>>> x[[4,2,1,7]]
array([[16, 17, 18, 19],
[ 8, 9, 10, 11],
[ 4, 5, 6, 7],
[28, 29, 30, 31]])
也可以进行倒叙取值
>>> x[[-4,-2,-1,-7]]
array([[16, 17, 18, 19],
[24, 25, 26, 27],
[28, 29, 30, 31],
[ 4, 5, 6, 7]])
行和列同时取值
>>> x[np.ix_([1,5,7,2],[0,3,1,2])]
array([[ 4, 7, 5, 6],
[20, 23, 21, 22],
[28, 31, 29, 30],
[ 8, 11, 9, 10]])
>>> x[np.ix_([1,5,7,2],[0,3,1,])]
array([[ 4, 7, 5],
[20, 23, 21],
[28, 31, 29],
[ 8, 11, 9]])
网友评论