如何使用np.where实现numpy数组字符串in条件匹配替代列表推导
解决方案
你可以使用numpy原生的向量化字符串操作实现需求,全程无需转换为列表处理,依赖numpy的广播特性配合np.char.count即可判断子串存在性,性能远高于列表推导:
完整可运行代码
import numpy as np currencies = np.array(["USD","NZL","EUR","KWR"]) target_str = "USDKLR EUR" # 统计每个货币代码在目标字符串中的出现次数,次数大于0即代表存在 mask = np.char.count(target_str, currencies) > 0 # 用np.where筛选符合条件的元素 currencie = currencies[np.where(mask)] print(currencie) # 输出结果:['USD' 'EUR']
核心逻辑说明
np.char.count是numpy提供的向量化字符串处理函数,传入的第一个参数是待检索的父字符串,支持自动广播到和第二个参数(子串数组)相同的长度- 仅需判断每个子串的出现次数是否大于0,即可得到对应元素是否在目标字符串中的布尔掩码
- 全程仅调用numpy内置函数,当数组长度达到万级以上时,执行效率相比列表推导有数量级提升
内容的提问来源于stack exchange,提问作者NermineAli
相关产品推荐
相关产品推荐

