2012-10-24 60 views
1

更大的阵列的一个子集我有2个数组中,为了简单起见,让我们说原来是随机的一组数字:查找numpy的阵列是否在Python

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

然后我采样和从这个数组洗牌的一个子集:

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

我做不存储索引值互换,以便b是一个

无序的子集,有一种简单的方法来获得b的原始指标,所以t嘿和a的顺序相同,比方说,如果b的元素2有a中的索引4,就创建一个赋值数组。

我可以使用的周期检查逐个元素,但也许还有一个更Python的方式

感谢

回答

2

我认为最计算效率的事情是保持跟踪关联的指标bab已创建。

,而不是抽样a例如,品尝a指数:

indices = random.sample(range(len(a)), k) # k < N 
b = a[indices] 
+0

或者,与Numpy(OP已经使用):'indices = np.arange(len(a)); np.random.shuffle(索引); indices = indices [:k]' –

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的答案。