加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

bothon从python中的列表子集索引

发布时间:2020-12-16 23:52:45 所属栏目:Python 来源:网络整理
导读:我有一个名字数组,以及相应的数据数组.从名称数组中,还有一个较小的名称子集: data = np.array([75.,49.,80.,87.,99.])arr1 = np.array(['Bob','Joe','Mary','Ellen','Dick'],dtype='|S5')arr2 = np.array(['Mary',dtype='|S5') 我正在尝试创建一个新的数据

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

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中出现的名称.这就是我自己能够想到的:

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

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

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

演示

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读