2016-02-27 40 views
1

我開始在numpy! 有些numpy的函數可以從另一個數組中搜索一個數組,並返回相似的數組? 謝謝!我如何搜索numpy的大數組陣列

import numpy as np 

def searchBinA(B = ['04','22'],A): 
    result = [] 
    ?......? numpy.search(B,A)? "is this correct?" 
    return result 

A = [['03', '04', '18', '22', '25', '29','30'], ['02', '04', '07', '09', '14', '29','30'], \ 
      ['06', '08', '11', '13', '17', '19','30'], ['04', '08', '22', '23', '27', '29','30'], \ 
      ['03', '05', '15', '22', '24', '25','30']] 

print(str(searchBinA())) 


output:[['03', '04', '18', '22', '25', '29','30'], ['04', '08', '22', '23', '27', '29','30']] 
+0

是各行中的那些元素'了'獨特之處? 'B'中的元素是獨特的嗎? – Divakar

+0

是的!Ais每一行中的每個元素都是獨一無二的!但A中的每一行可能不是唯一的! b中的每個元素也是唯一的! – user4230219

回答

1

假定輸入是NumPy的陣列和有的A每行內沒有重複,這裏是使用np.in1d的方法 -

A[np.in1d(A,B).reshape(A.shape).sum(1) == len(B)] 

解釋 -

  1. 獲取掩模AB中的任何元素匹配np.in1d(A,B)。請注意,這將是一維布爾數組。

  2. np.in1d(A,B)從所獲得的布爾數組重塑到A's形狀,然後尋找具有對於每一行,其中n是在B元件的數量n匹配的行。因爲每行中都有獨特的元素,所以匹配的行就是我們在最終輸出中想要的行。

  3. 因此,總和2D重塑沿着行布爾陣列,並比較針對n給我們一個布爾掩碼,其中當索引到A會給我們選擇性行從它作爲所期望的輸出。

採樣運行 -

In [23]: A 
Out[23]: 
array([['03', '04', '18', '22', '25', '29', '30'], 
     ['02', '04', '07', '09', '14', '29', '30'], 
     ['06', '08', '11', '13', '17', '19', '30'], 
     ['04', '08', '22', '23', '27', '29', '30'], 
     ['03', '05', '15', '22', '24', '25', '30']], 
     dtype='|S2') 

In [24]: B 
Out[24]: 
array(['04', '22'], 
     dtype='|S2') 

In [25]: A[np.in1d(A,B).reshape(A.shape).sum(1) == len(B)] 
Out[25]: 
array([['03', '04', '18', '22', '25', '29', '30'], 
     ['04', '08', '22', '23', '27', '29', '30']], 
     dtype='|S2')