Numpy数组异常值过滤:解析代码`f_data = data[data[:,3]==1,:]`
NumPy数组行过滤代码拆解说明
这行代码的核心作用是:从NumPy数组data里,只保留第4列(注意NumPy索引从0开始)值等于1的所有行,过滤掉不符合条件的行。下面拆成三部分讲清楚:
data[:,3]:这是NumPy的切片语法,:代表取数组的所有行,3是列的索引(因为索引从0算,所以对应第4列)。这部分执行后会得到一个一维数组,内容就是原数组第4列的所有元素。data[:,3]==1:这是元素级的比较操作,把刚才拿到的第4列每个元素和1逐一对比,输出一个和原数组行数相同的布尔数组——每一位是True就表示对应行的第4列等于1,False则相反。data[data[:,3]==1,:]:用上面得到的布尔数组作为行索引,从原数组里筛选行:布尔值为True的行会被保留,False的行直接过滤掉。后面的:表示保留所有列,最终f_data就是筛选后的结果。
举个实际例子更直观:
import numpy as np # 构造一个4行4列的测试数组 data = np.array([ [1, 2, 3, 1], [4, 5, 6, 2], [7, 8, 9, 1], [10, 11, 12, 3] ]) # 执行筛选代码 f_data = data[data[:,3]==1,:] # 输出f_data会得到: # [[1 2 3 1] # [7 8 9 1]]
如果你的需求是过滤异常值(比如要去掉第2列大于10的行),只需要把条件改成对应的判断就行,比如data[data[:,1]<=10,:],核心逻辑都是先拿目标列、生成布尔索引、再筛选行。
内容的提问来源于stack exchange,提问作者Raouli00
相关产品推荐
相关产品推荐

