Python基于索引筛选Numpy数组:结果无法存入空列表排查
问题原因及修正方案
核心错误点
- 索引方向搞反:你写的
arr[:1,i]是取第i列的第一行数据,而你要判断的是每一行的第二列(索引为1),应该用arr[i, 1]来获取对应位置的值。 - 添加内容错误:符合条件时你把整个原数组
arr添加到列表里,而不是当前符合条件的行arr[i],这会导致最终结果全是原数组的重复。 - 循环逻辑冗余:用Python循环处理Numpy数组效率低,Numpy本身支持矢量化筛选,没必要手动遍历。
修正后的代码
方式一:修正循环逻辑
如果坚持用循环,改成这样:
import numpy as np data = [ [0.0,52.0,33.0,44.0,51.0], [0.0,30.0,45.0,12.0,44.0], [0.0,67.0,99.0,23.0,78.0] ] arr = np.array(data) filter_arr = [] for i in range(len(arr)): # 取第i行的第二列(索引1)判断是否大于50 if arr[i, 1] > 50: filter_arr.append(arr[i]) # 添加当前行而非整个数组 filter_arr = np.array(filter_arr) print(filter_arr)
方式二:Numpy矢量化筛选(推荐)
这是Numpy的标准用法,更简洁高效:
import numpy as np data = [ [0.0,52.0,33.0,44.0,51.0], [0.0,30.0,45.0,12.0,44.0], [0.0,67.0,99.0,23.0,78.0] ] arr = np.array(data) # 直接用布尔索引筛选第二列>50的行 filter_arr = arr[arr[:, 1] > 50] print(filter_arr)
两种方式运行后都会得到你期望的结果:
array([[ 0., 52., 33., 44., 51.], [ 0., 67., 99., 23., 78.]])
内容的提问来源于stack exchange,提问作者stack offer
相关产品推荐
相关产品推荐

