numpy对数组按索引查询

696 阅读2分钟

三种索引方法:

  1. 基础索引
  2. 神奇索引
  3. 布尔索引

#导入模块 import numpy as np

#一维变量 x = np.arange(10)

#二维变量 X = np.arange(20).reshape(4,5)

基础索引:

一维数组

#同python中list一样,采用下标索引,同时也支持切片

print(x[2]) #输出结果为2

print(x[2:-1]) #输出结果为array([2,3,4,5,6,7,8])

二维数组

#分别用行坐标,列坐标进行筛选 X[-1,2] #结果是17

#也可以省略后续索引值,返回的数据是一个降低维度的数组

筛选-1对应的行X[-1] #结果是array([15,16,17,18,19])

筛选多行X[:-1] #结果是 `

                         array(
                         
                         [[0,1,2,3,4],

                         [5,6,7,8,9],
                         
                         [10,11,12,13,14]])`
                         

筛选多行然后筛选多列X[:2,2:4] #结果为array([[2,3],[7,8]])

注意:切片的修改为修改原来的数组

原因:numpy经常要处理大数组,避免每次都复制

神奇索引

其实就是:用整数数组进行索引

#筛选多行,列可以省略X[[0,2]]

结果为array([[0,1,2,3,4],

       [10,11,12,13,14]])
       

#筛选多列,行不能省略 X[:,[0,2,3]]

#同时指定行列列表,返回的是[(0,1),(2,3),(3,4)]位置的数字X[[0,2,3],[1,3,4]]

注意:与切片不同,神奇索引是将数据复制到一个新的数组

布尔索引

就是通过数组上是True还是False来提取的

屏幕截图 2022-11-17 094607.png

#X>5的二维数组,既有行也有列,返回的是一维结果

X[X>15] #结果是array([16,17,18,19])

#也可以使用条件索引

   condition = (x%2==0) | (x>7)
   x[condition]

#结果为array([0,2,4,6,7,8,9])