查找numpy数组是否是Python中较大数组的子集

时间:2012-10-24 22:11:44

标签: python arrays numpy subset

我有2个数组,为了简单起见,我们假设原始数组是一组随机数:

import numpy as np
a=np.random.rand(N)

然后我从这个数组中采样并随机播放一个子集:

b=np.array()  <------size<N

洗牌我没有存储索引值,所以b是

的无序子集

是否有一种简单的方法来获取b的原始索引,因此它们与a的顺序相同,例如,如果b的元素2中的索引为4,则创建其赋值的数组。

我可以逐个元素地使用循环检查,但也许有更多的pythonic方式

由于

2 个答案:

答案 0 :(得分:2)

我认为计算效率最高的事情是跟踪ba关联的索引,并创建b

例如,不是采样a,而是采用a

的索引
indices = random.sample(range(len(a)), k)   # k < N
b = a[indices]

答案 1 :(得分:0)

关闭机会a恰好可以排序:

>>> from numpy import array
>>> a = array([1, 3, 4, 10, 11])
>>> b = array([11, 1, 4])
>>> a.searchsorted(b)
array([4, 0, 2])

如果a没有排序,那么最好不要使用@ unutbu的答案。