2012-04-27 20 views

Respuesta

68
>>> numpy.array([[1, 2], [3, 4]]) 
array([[1, 2], [3, 4]]) 
+3

El REPL significa la reducción en las preguntas de principiante apreciablemente . –

+8

esto convierte automáticamente una lista de listas en una matriz 2D porque la longitud de todas las listas incluidas es la misma. ¿Sabes cómo no hacer eso: hacer un conjunto de listas incluso si todas las listas tienen la misma longitud? ¿O es posible convertir una matriz 2D en una matriz 1D de matriz 1D (es decir, no hay método iterativo o material de mapa python) –

+3

Si eso no funciona para usted porque sus sublistas no son de tamaños pares, consulte [la respuesta siguiente] (http://stackoverflow.com/a/26224619/1449460). –

9

Es tan simple como:

>>> lists = [[1, 2], [3, 4]] 
>>> np.array(lists) 
array([[1, 2], 
     [3, 4]]) 
76

Si su lista de listas tiene listas con un número variable de elementos que la respuesta de Ignacio Vazquez-Abrams no va a funcionar. En su lugar hay 3 opciones:

1) incurrir en una matriz de matrices:

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) Hacer una serie de listas:

x=[[1,2],[1,2,3],[1]] 
y=numpy.array(x) 
type(y) 
>>><type 'numpy.ndarray'> 
type(y[0]) 
>>><type 'list'> 

3) En primer lugar hacer las listas de igual longitud:

x=[[1,2],[1,2,3],[1]] 
length = len(sorted(x,key=len, reverse=True)[0]) 
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) 
+7

Gracias, vinieron aquí para esto. He estado usando Numpy por un tiempo, y encontré este comportamiento no trivial. Gracias por tomarse el tiempo para explicar este caso más general. –

+0

¡Me gusta esta respuesta! – alisa

15

Como esta es la búsqueda superior en Google para convertir una lista de listas en una matriz Numpy, ofreceré lo siguiente a pesar de ser la pregunta 4 años de edad:

>>> x = [[1, 2], [1, 2, 3], [1]] 
>>> y = numpy.hstack(x) 
>>> print(y) 
[1 2 1 2 3 1] 

La primera vez que pensé en hacerlo de esta manera, yo estaba muy satisfecho de mí mismo porque es taaaan simple. Sin embargo, después de sincronización con una lista más grande de las listas, en realidad es más rápido para hacer esto:

>>> y = numpy.concatenate([numpy.array(i) for i in x]) 
>>> print(y) 
[1 2 1 2 3 1] 

Tenga en cuenta que @ de Bastiaan respuesta # 1 no hace una sola lista continua, por lo tanto, he añadido el concatenate.

De todos modos ... Prefiero el enfoque hstack para su uso elegante de Numpy.

0

Una vez más, después de buscar el problema de la conversión de listas anidadas con niveles de N en una matriz de N dimensiones no he encontrado nada, así que aquí es mi manera de evitarlo:

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 
Cuestiones relacionadas