import numpy as np #创建二维数组 x = np.array([[1, 2], [3, 4], [5, 6]]) #[0,1,2]代表行索引;[0,1,0]代表列索引 y = x[[0,1,2],[0,1,0]] print (y)输出结果是:
[1 4 5]
对上述示例做简单分析:将行、列索引组合会得到 (0,0)、(1,1) 和 (2,0) ,它们分别对应着输出结果在原数组中的索引位置。import numpy as np b = np.array([[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 9,10,11]]) r = np.array([[0,0],[3,3]]) c = np.array([[0,2],[0,2]]) #获取四个角的元素 c = b[r,c] print(c)输出结果:
[[ 0 2] [ 9 11]]您也可以将切片所使用的
:
或省略号...
与整数数组索引结合使用,示例如下:
import numpy as np d = np.array([[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 9, 10, 11]]) #对行列分别进行切片 e = d[1:4,1:3] print(e) #行使用基础索引,对列使用高级索引 f = d[1:4,[1,2]] #显示切片后结果 print (f) #对行使用省略号 h=d[...,1:] print(h)输出结果:
#e数组 [[ 4 5] [ 7 8] [10 11]] #f数组 [[ 4 5] [ 7 8] [10 11]] #h数组 [[ 1, 2], [ 4, 5], [ 7, 8], [10, 11]]
#返回所有大于6的数字组成的数组 import numpy as np x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]]) print (x[x > 6])输出结果:
[ 7 8 9 10 11]
我们可以使用补码运算符来去除 NaN(即非数字元素),如下所示:import numpy as np a = np.array([np.nan, 1,2,np.nan,3,4,5]) print(a[~np.isnan(a)])输出结果:
[ 1. 2. 3. 4. 5.]
下面示例,删除数组中整数元素,如下所示:import numpy as np a = np.array([1, 2+6j, 5, 3.5+5j]) print( a[np.iscomplex(a)])输出结果如下:
[2.0+6.j 3.5+5.j]
花式索引也会生成一个新的副本。
当原数组是一维数组时,使用一维整型数组作为索引,那么索引结果就是相应索引位置上的元素。>>> import numpy as np >>> x=np.array([1,2,3,4]) >>> print(x[0]) 1如果原数组是二维数组,那么索引数组也需要是二维的,索引数组的元素值与被索引数组的每一行相对应,示例如下:
import numpy as np x=np.arange(32).reshape((8,4)) #分别对应 第4行数据、第2行数据、第1行数据、第7行数据项 print (x[[4,2,1,7]])输出结果:
[[16 17 18 19] [ 8 9 10 11] [ 4 5 6 7] [28 29 30 31]]也可以使用倒序索引数组,示例如下:
import numpy as np x=np.arange(32).reshape((8,4)) print (x[[-4,-2,-1,-7]])输出结果:
[[16 17 18 19] [24 25 26 27] [28 29 30 31] [ 4 5 6 7]]还可以同时使用多个索引数组,但这种情况下需要添加
np.ix_
。
import numpy as np x=np.arange(32).reshape((8,4)) print (x[np.ix_([1,5,7,2],[0,3,1,2])])输出结果如下:
[[ 4 7 5 6] [20 23 21 22] [28 31 29 30] [ 8 11 9 10]]其中 [1,5,7,2] 代表行索引,而 [0,3,1,2] 表示与行索引相对应的列索引值,也就是行中的元素值会按照列索引值排序。比如,第一行元素,未排序前的顺序是 [4,5,6,7],经过列索引排序后变成了 [4,7,5,6]。
本文链接:http://task.lmcjl.com/news/13603.html