2017-10-16 6 views
0

J'ai une très grande liste de listes contenant ndarrays numpy où j'ai besoin de mapper des lettres à une valeur entière. Ceci est dans la ligne de ce que je pensais pouvoir fonctionner, mais il ne semble pas attraper tous les tableaux.Remplacer des valeurs dans 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')] 

J'ai aussi essayé de parcourir toutes les clés pour les remplacer dans le tableau un par un avec les éléments suivants

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

mais retourne, que je suppose sens. Quelqu'un at-il des moyens astucieux de remplacer toutes ces valeurs à la fois et dans tous les cas? Merci beaucoup!

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

Répondre

1

Vous pouvez essayer ceci:

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

Oui - exactement. J'ai juste fait une boucle pour faire une boucle sur toutes les clés du dictionnaire en tant que boucle externe et ensuite mettre la vôtre comme boucle interne avec une variable pour où 'a' était. J'espérais un one shot remplacer tout, mais je pense que devrait toujours être O (n), donc pas de mal je suppose, non? Merci! – user6142489

+0

Je viens de découvrir que cela tronque le nombre à un seul chiffre. Donc, 1000 est lu comme 1. Toutes les idées? – user6142489

+0

Étant donné que le type de tableau est '