首页 > 解决方案 > 检查数组中多个元素的相等性

问题描述

我是 Matlab 的 Python 新手。

我想从现有 numpy 数组的子集创建一个新变量,该变量基于与第三个 numpy 数组指定的某些条件的相等性,在这种情况下为 ID。

这适用于一个平等。

new_x = old_x[someID == 1]

但是,如果我尝试一次扩展几个等式,它就不再起作用了:

new_x = old_x[someID == 1:3]

理想情况下,我希望能够选择许多等式,例如:

new_x = old_x[someID == 1:3,7]

我可以遍历每个我想检查的数字,但有没有更简单的方法呢?

标签: python

解决方案


你可以使用np.isin+ np.r_

import numpy as np

# for reproducible results
np.random.seed(42)

# toy data
old_x = np.random.randint(10, size=100)

# create new array by filtering on boolean mask
new_x = old_x[np.isin(old_x, np.r_[1:3,7])]

print(new_x)

输出

[7 2 7 7 7 2 1 7 1 2 2 2 1 1 1 7 2 1 7 1 1 1 7 7 1 7 7 7 7 2 7 2 2 7]

您可以np.r_用类似的东西代替[1, 2, 7]并使用它,如下所示:

new_x = old_x[np.isin(old_x, [1, 2, 7])]

此外,如果数组是一维的,您可以使用np.in1d

new_x = old_x[np.in1d(old_x, [1, 2, 7])]
print(new_x) 

输出 (来自 in1d)

[7 2 7 7 7 2 1 7 1 2 2 2 1 1 1 7 2 1 7 1 1 1 7 7 1 7 7 7 7 2 7 2 2 7]

推荐阅读