我有一个名字数组,以及相应的数据数组.从名称数组中,还有一个较小的名称子集:
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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。