2012-04-27 55 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