bothon从python中的列表子集索引

前端之家收集整理的这篇文章主要介绍了bothon从python中的列表子集索引前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个名字数组,以及相应的数据数组.从名称数组中,还有一个较小的名称子集:

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

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

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

有没有更有效的方法来做这个不涉及for循环?我应该提到数组本身是从外部文件输入的,实际上有多个数据数组,所以我无法真正改变它.

最佳答案
您可以使用numpy.in1d,它测试一个数组中的每个元素是否也存在于第二个数组中.

演示

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

in1d返回一个bool的ndarray,类似于你在原始代码中构造的列表:

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

猜你在找的Python相关文章