从Matlab转Python,如何实现Numpy数组多值相等条件的索引筛选
你需要使用numpy内置的np.isin()方法实现多值匹配筛选,这是比循环效率高得多的矢量运算实现,完全可以替代你期望的类Matlab多值相等筛选写法。你之前的写法不生效是因为==后接切片1:3属于Matlab语法,Python原生语法和numpy都不支持这种用法。
具体实现示例
- 匹配ID为1、2、3的元素(对应你写的
1:3的Matlab语法效果)
import numpy as np # 第二个参数传入你要匹配的所有值的列表即可 new_x = old_x[np.isin(someID, [1,2,3])]
如果匹配的是连续整数,也可以用np.arange生成列表,避免手动输入:
# np.arange的右边界是开区间,所以要取1到3需要写np.arange(1,4) new_x = old_x[np.isin(someID, np.arange(1,4))]
- 匹配ID为1、2、3、7的元素(对应你期望的
1:3,7效果)
直接把所有待匹配的值放进列表即可:
new_x = old_x[np.isin(someID, [1,2,3,7])]
补充用法
如果需要筛选ID不在指定列表中的元素,给np.isin()返回的布尔数组前加取反符~即可:
# 筛选ID不等于1、2、3、7的元素 new_x = old_x[~np.isin(someID, [1,2,3,7])]
内容的提问来源于stack exchange,提问作者N Blake
相关产品推荐
相关产品推荐

