2012-04-27 22 views

Odpowiedz

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

REPL oznacza wycinanie na pytania początkujących odczuwalnie . –

+8

to automatycznie konwertuje listę list w tablicy 2D, ponieważ długość wszystkich zawartych list jest taka sama. Czy wiesz, jak tego nie robić: zrobić tablicę z listą, nawet jeśli wszystkie listy mają tę samą długość? Czy możliwa jest konwersja tablicy 2D w macierze 1D z tablicą 1D (efektywnie mam na myśli, bez iteracyjnej metody lub rzeczy z mapy Pythona) –

+3

Jeśli to nie działa, ponieważ twoje podlisty nie mają nawet rozmiarów, zobacz [ następujące odpowiedzi] (http://stackoverflow.com/a/26224619/1449460). –

9

Jest to tak proste, jak:

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

Jeśli lista list ma list z różnej liczby elementów niż odpowiedzi Ignacio Vazquez-Abrams nie będzie działać. Zamiast tego są 3 opcje:

1) dokonać tablicy tablic:

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) Sprawdź tablicę list:

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

3) Najpierw należy wykazy równej długości:

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

Dzięki, przyszedłeś tu po to. Używałem numpy przez pewien czas i stwierdziłem, że to zachowanie nie jest trywialne. Dziękuję za poświęcenie czasu na wyjaśnienie tego bardziej ogólnego przypadku. –

+0

Kciuki w górę za tę odpowiedź! – alisa

15

Ponieważ jest to najlepsze wyszukiwanie w Google do konwersji listy list do tablicy Numpy, będę oferować następujące pomimo kwestii będącej 4 lat:

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

Kiedy pierwsza myśl to zrobić w ten sposób, byłem dość zadowolony z siebie, bo to baaaardzo proste. Jednak po taktowania go z większej listy list, to jest rzeczywiście szybciej to zrobić:

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

Zauważ, że @ Bastiaan za Odpowiedź # 1 nie robi jedną listę ciągły, a więc dodałem concatenate.

W każdym razie ... Preferuję podejście hstack dla eleganckiego korzystania z Numpy.

0

Ponownie, po wyszukaniu problemu konwersja zagnieżdżonych list z poziomu N do tablicy n-wymiarowej nic nie znalazłem, więc oto mój sposób wokół niego:

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