Comment convertir une simple liste de listes en un tableau numpy? Les lignes sont des sous-listes individuelles et chaque ligne contient les éléments de la sous-liste.
194
Si votre liste de listes contient des listes avec un nombre variable d'éléments, la réponse d'Ignacio Vazquez-Abrams ne fonctionnera pas. Au lieu de cela, il y a au moins 3 options:
1) Créez un tableau de tableaux:
x=[[1,2],[1,2,3],[1]]
y=numpy.array([numpy.array(xi) for xi in x])
type(y)
>>><type 'numpy.ndarray'>
type(y[0])
>>><type 'numpy.ndarray'>
2) Faites un tableau de listes:
x=[[1,2],[1,2,3],[1]]
y=numpy.array(x)
type(y)
>>><type 'numpy.ndarray'>
type(y[0])
>>><type 'list'>
3) Faites d'abord les listes de longueur égale:
x=[[1,2],[1,2,3],[1]]
length = max(map(len, x))
y=numpy.array([xi+[None]*(length-len(xi)) for xi in x])
y
>>>array([[1, 2, None],
>>> [1, 2, 3],
>>> [1, None, None]], dtype=object)
dtype=float
fonctionne aussi, il sera convertiNone
ennp.nan
, ce qui peut être utile.>>> numpy.array([[1, 2], [3, 4]]) array([[1, 2], [3, 4]])
la source
Comme il s'agit de la principale recherche sur Google pour convertir une liste de listes en un tableau Numpy, je vais vous proposer ce qui suit bien que la question ait 4 ans:
>>> x = [[1, 2], [1, 2, 3], [1]] >>> y = numpy.hstack(x) >>> print(y) [1 2 1 2 3 1]
Quand j'ai pensé à le faire de cette façon pour la première fois, j'étais assez content de moi car c'est tellement simple. Cependant, après avoir chronométré avec une plus grande liste de listes, il est en fait plus rapide de le faire:
>>> y = numpy.concatenate([numpy.array(i) for i in x]) >>> print(y) [1 2 1 2 3 1]
Notez que la réponse n ° 1 de @ Bastiaan ne fait pas une seule liste continue, j'ai donc ajouté le fichier
concatenate
.Quoi qu'il en soit ... Je préfère l'
hstack
approche pour son utilisation élégante de Numpy.la source
C'est aussi simple que:
>>> lists = [[1, 2], [3, 4]] >>> np.array(lists) array([[1, 2], [3, 4]])
la source
Encore une fois, après avoir recherché le problème de la conversion de listes imbriquées avec N niveaux en un tableau à N dimensions, je n'ai rien trouvé, alors voici mon chemin:
import numpy as np new_array=np.array([[[coord for coord in xk] for xk in xj] for xj in xi], ndmin=3) #this case for N=3
la source
[...[...[...]]]
pièce. Vous avez juste besoin d'appelernp.array
, avecndmin=number-of-list-layers
. (bien que dans mon cas j'en avais besoinndmin=number-of-list-layers-minus-1
pour une raison quelconque, sinon j'ai créé une couche supplémentaire - besoin d'enquêter)np.array
simplement "envelopper" ces listes les plus profondes plutôt que de les convertir en tableaux numpy.J'avais une liste de listes de longueur égale. Même alors,
Ignacio Vazquez-Abrams
la réponse n'a pas fonctionné pour moi. J'ai un tableau numpy 1-D dont les éléments sont des listes. Si vous rencontrez le même problème, vous pouvez utiliser la méthode ci-dessousUtilisation
numpy.vstack
import numpy as np np_array = np.empty((0,4), dtype='float') for i in range(10) row_data = ... # get row_data as list np_array = np.vstack((np_array, np.array(row_data)))
la source
Utilisez juste des pandas
cela ne fonctionne que pour une liste de listes
si vous avez une liste de listes, vous voudrez peut-être essayer quelque chose du genre
la source