如何从NumPy数组的第n列中直接筛选小于m的数值,无需定义中间变量
NumPy 单列条件筛选的一步实现方法
当然可以一步实现,不需要单独声明中间变量存储目标列,但你写的示例写法存在维度不匹配的问题,需要调整条件的作用范围。
你尝试的x[:, 0][x < 0.5]无法正常运行,原因是x < 0.5生成的是和原始二维数组x形状一致的布尔矩阵,而x[:, 0]是长度等于行数的一维数组,两者形状不匹配,索引时会直接报错。
正确实现方式
写法1:合并索引操作(性能更优,只做一次数组访问)
直接在原始数组的索引逻辑里同时指定行筛选条件和列目标:
import numpy as np x: np.ndarray = np.array([ [0.1, 0.5], [0.7, 0.4], [0.6, 0.9] ]) values_below_05_from_first_column = x[x[:, 0] < 0.5, 0]
逻辑说明:逗号前的x[:, 0] < 0.5会针对第一列生成一维布尔掩码,筛选出第一列数值小于0.5的行,逗号后的0指定取这些行的第一列数值,一步完成筛选。
写法2:链式索引(写法更贴合你原本的思路)
把条件的作用对象改成切片后的第一列即可:
import numpy as np x: np.ndarray = np.array([ [0.1, 0.5], [0.7, 0.4], [0.6, 0.9] ]) values_below_05_from_first_column = x[:, 0][x[:, 0] < 0.5]
两种写法的运行结果完全一致,示例中输出为array([0.1]),和两步写法的结果完全相同。
内容的提问来源于stack exchange,提问作者mikolaj semeniuk
相关产品推荐
相关产品推荐

