bothon从python中的列表子集索引

时间:2014-01-14 22:56:35

标签: python arrays indexing boolean

我有一个名字数组,以及相应的数据数组。从名称数组中,还有一小部分名称:

data = np.array([75., 49., 80., 87., 99.])
arr1 = np.array(['Bob', 'Joe', 'Mary', 'Ellen', 'Dick'], dtype='|S5')
arr2 = np.array(['Mary', 'Dick'], dtype='|S5')

我正在尝试创建一个新的数据数组,仅对应于arr2中出现的名称。这就是我自己能够提出的:

TF = []
for i in arr1: 
    if i in arr2:
        TF.append(True)
    else:
        TF.append(False)
new_data = data[TF]

有没有更有效的方法来执行此操作而不涉及for循环?我应该提一下,数组本身是从外部文件输入的,实际上有多个数据数组,所以我无法真正改变它。

1 个答案:

答案 0 :(得分:4)

您可以使用numpy.in1d来测试一个数组中的每个元素是否也存在于第二个数组中。

<强>演示

>>> new_data = data[np.in1d(arr1, arr2)]
>>> new_data
array([ 80.,  99.])

in1d会返回ndarray个bools,类似于您在原始代码中构建的列表:

>>> np.in1d(arr1, arr2)
array([False, False,  True, False,  True], dtype=bool)