2017-10-16 228 views
0

我有一個包含numpy ndarrays的列表的非常大的列表,我需要將字母映射到一個整數值。替換numpy ndarray中的值

這是我所想的可能工作,但它似乎並沒有捕獲所有數組。

import numpy as np 

x = [np.array(['a','b','c']),np.array(['d','e']),np.array(['a','e'])] 
dict_x = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e':5} 

x[ x == 'a'] = dict_x.get('a') 

Output: [1, array(['d', 'e'], 
    dtype='<U1'), array(['a', 'e'], 
    dtype='<U1')] 

我也試圖通過所有鍵的迭代由一個具有以下

for i in dict_x.keys(): 
    x[ x == i] = dict_x.get(i) 

,以取代他們的陣列之一,但這個回報,這我想是有道理的。任何人有任何巧妙的方法可以一次或全部替換所有這些值?非常感謝!

[5, array(['d', 'e'], 
    dtype='<U1'), array(['a', 'e'], 
    dtype='<U1')] 

回答

1

你可以試試這個:

x = [np.array(['a','b','c'], dtype="<U4"),np.array(['d','e'], dtype="<U4"),np.array(['a','e'], dtype="<U4")] 
dict_x = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e':5} 

for i in x: 
    i[ i == 'a'] = dict_x.get('a') 

x = array(['1', 'b', 'c'], 
     dtype='<U1'), array(['d', 'e'], 
     dtype='<U1'), array(['1', 'e'], 
     dtype='<U1')] 
+0

是 - 正好。我只是做了一個循環來循環遍歷字典中的所有鍵作爲外部循環,然後將你的內部循環與一個變量放在哪裏'a'。我希望能夠一槍全部取代,但我認爲應該仍然是O(n),所以我猜沒有害處,對吧?謝謝! – user6142489

+0

我剛剛發現這將數字截斷爲一個數字。所以,1000被讀作1.任何想法? – user6142489

+0

因爲數組的dtype是'