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.
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.
Réponses:
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)
>>> numpy.array([[1, 2], [3, 4]])
array([[1, 2], [3, 4]])
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.
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
[...[...[...]]]
pièce. Vous avez juste besoin d'appeler np.array
, avec ndmin=number-of-list-layers
. (bien que dans mon cas j'en avais besoin ndmin=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-dessous
Utilisation 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)))