2012-10-24 57 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的答案。