如何筛选ndarray中首列字符串指定位为指定值的对应第二列元素
问题描述
现有格式如下的NumPy ndarray数组:
[['000' '0.0008303259945444978'] ['001' '0.001097105216902647'] ['010' '0.009235959101850126'] ['011' '0.00047129154937779666'] ['100' '0.018205469077740434'] ['101' '0.0013647687750767113'] ['110' '0.94056678166667'] ['111' '0.028228298617837884']]
需要实现的逻辑:从数组第二列中,筛选出第一列对应值满足特定规则的元素,提取对应第二列的值构建为新的ndarray数组。
本次示例的筛选规则:第一列字符串的第二位、第三位字符均为0。
实现方法
核心实现逻辑如下:
- 遍历数组第一列的所有字符串,按照指定规则做校验,生成布尔筛选掩码
- 用掩码过滤原数组,取出符合条件的第二列值
- 由于原数组第二列存储的是字符串格式,统一转换为浮点类型后生成最终的ndarray数组
可直接运行的代码:
import numpy as np # 原始输入数组 origin_arr = np.array([ ['000', '0.0008303259945444978'], ['001', '0.001097105216902647'], ['010', '0.009235959101850126'], ['011', '0.00047129154937779666'], ['100', '0.018205469077740434'], ['101', '0.0013647687750767113'], ['110', '0.94056678166667'], ['111', '0.028228298617837884'] ]) # 构造筛选掩码:Python字符串索引从0开始,第二位对应索引1,第三位对应索引2 filter_mask = [ (s[1] == '0' and s[2] == '0') for s in origin_arr[:, 0] ] # 筛选值并做类型转换,得到最终结果 result_arr = origin_arr[filter_mask, 1].astype(np.float64)
运行结果
按照示例规则筛选,只有第一列值为'000'的行符合要求,最终输出的结果数组为:
array([0.00083033])
提示:如果需要更换筛选规则,只需要修改
filter_mask的判断逻辑即可,后续筛选、类型转换的代码无需调整。
内容的提问来源于stack exchange,提问作者Petar Andreev
相关产品推荐
相关产品推荐

