如何使用NumPy where获取元素而非索引?Python技术问询
使用NumPy的where函数获取元素而非索引的方法
嗨,我来帮你搞定这个问题~你现在的需求是用NumPy的where拿到符合条件的元素,而不是默认返回的索引对吧?其实两种简单方法就能实现,和你写的循环结果完全一致:
方法1:直接用布尔索引(最简洁)
NumPy数组支持用布尔数组做索引,直接把你的条件套进去就能筛选出目标元素,不用绕弯子:
import numpy as np # 生成模拟数据 test = np.ones((10,10)) for i in range(0,10): for j in range(0,10): test[i,j] = i*2.0 + j # 直接筛选test第5列中8到18之间的元素 filtered = test[:,5][(test[:,5] >= 8.0) & (test[:,5] <= 18.0)] print(filtered)
方法2:用where拿到索引后提取元素
如果一定要用where函数,那可以先获取符合条件的索引,再用索引去原数组中取元素:
# 先拿到满足条件的行索引 indices = np.where((test[:,5] >= 8.0) & (test[:,5] <= 18.0)) # 通过索引提取对应元素 filtered = test[:,5][indices] print(filtered)
验证结果
运行上面的代码,输出和你写的循环结果完全一样:
[ 8. 10. 12. 14. 16. 18.]
简单说,where本身返回的是满足条件的位置索引,所以只要把这个索引作用在你要筛选的数组切片上,就能拿到对应的元素啦~
内容的提问来源于stack exchange,提问作者astrohuman
相关产品推荐
相关产品推荐

