2012-04-27 54 views

回答

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

的REPL指略微削減初學者問題。 – 2012-04-27 07:21:54

+8

這會自動轉換2D數組中列表的列表,因爲所有包含列表的長度都是相同的。你知道如何不這麼做:即使所有列表的長度相同,也要創建一個列表數組?或者是否有可能在1D數組的一維數組中轉換二維數組(有效地,我的意思是,沒有迭代方法或python地圖的東西) – 2012-10-04 09:58:00

+3

如果這對您不適用,因爲您的子列表的大小不是一樣的,請參閱[the以下答案](http://stackoverflow.com/a/26224619/1449460)。 – 2016-10-17 05:27:25

9

很簡單:

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

如果你的列表清單有不同的元素比伊格納西奧巴斯克斯 - 艾布拉姆斯的答案是行不通的次數列出。代替有3個選項:

1)請數組的數組:

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)請列出的數組:

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

3)首先使列表在長度上相等:

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

謝謝,爲此來到這裏。一段時間以來,一直在使用numpy,並發現這種行爲並不平凡。感謝您抽出時間來解釋這個更一般的情況。 – 2014-10-29 00:07:46

+0

豎起大拇指爲這個答案! – alisa 2016-11-12 04:19:25

15

由於這是Google列表中將列表轉換爲Numpy數組的首選搜索,我將提供以下內容儘管問題是4歲:

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

當我第一次想到這樣做,我很高興與我自己,因爲它是如此簡單。然而,隨着名單的大名單時間之後,它實際上是更快地做到這一點:

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

注意@巴斯蒂安的回答#1不使一個單一的連續的列表,所以我增加了concatenate

無論如何...我更喜歡hstack的方法,因爲它的優雅使用Numpy。

0

此外,搜索轉換嵌套列表具有N個等級爲N維數組的問題後,我什麼也沒找到,所以這裏是我的方式圍繞它:

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