2011-08-02 17 views
2

我有以下數組。 a和b之間使用select方法在numpy數組中選擇軸

In [1]: a = np.array([["aa", "bb", "cc"], ["cc", "bb", "aa"]]) 
In [2]: a 
Out[2]: 
array([['aa', 'bb', 'cc'], 
     ['cc', 'bb', 'aa']], 
     dtype='|S2') 

In [3]: b = np.array([[11, 12, 13], [21, 22, 23]]) 
In [4]: b 
Out[4]: 
array([[11, 12, 13], 
     [21, 22, 23]]) 

關係可以在 'A' 在概念上被描述爲B [0] .aa = 11個B [0]的.bb = 12 B [0] = .CC 13即行'b'中的鍵和行是單個字典的值。第一行將代表

{'aa': 11, 'bb': 12, 'cc': 13} 

現在我們給出這些字符的鍵。

In [5]: c = np.array(["bb", "aa"]) 
In [6]: c 
Out[6]: 
array(['bb', 'aa'], 
    dtype='|S2') 

現在,訪問b數組給定'c'的最佳方式是將每行的軸作爲'a'中的值。一種方法是

In [7]: cond_list = [a[:, 0] == c, a[:, 1] == c, a[:, 2] == c] 
In [8]: choice_list = [b[:, 0], b[:, 1], b[:, 2]] 
In [9]: np.select(cond_list, choice_list) 
Out[9]: array([12, 23]) 

有沒有更好的方法呢?如果a和b中的軸的數量在手之前是未知的,該怎麼辦?

回答

2
In [13]: a==c[:,np.newaxis] 
Out[13]: 
array([[False, True, False], 
     [False, False, True]], dtype=bool) 

In [14]: b[a==c[:,np.newaxis]] 
Out[14]: array([12, 23]) 
+1

感謝您的酷招。 – pvncad