Bas*_*aan 170
如果您的列表列表包含具有不同数量元素的列表,则Ignacio Vazquez-Abrams的答案将不起作用.相反,有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'>
Run Code Online (Sandbox Code Playgroud)
2)制作一系列清单:
x=[[1,2],[1,2,3],[1]]
y=numpy.array(x)
type(y)
>>><type 'numpy.ndarray'>
type(y[0])
>>><type 'list'>
Run Code Online (Sandbox Code Playgroud)
3)首先使列表的长度相等:
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)
Run Code Online (Sandbox Code Playgroud)
Ign*_*ams 95
>>> numpy.array([[1, 2], [3, 4]])
array([[1, 2], [3, 4]])
Run Code Online (Sandbox Code Playgroud)
2cy*_*kyl 32
由于这是谷歌将列表列表转换为Numpy阵列的最佳搜索,我将提供以下内容,尽管问题是4年前:
>>> x = [[1, 2], [1, 2, 3], [1]]
>>> y = numpy.hstack(x)
>>> print(y)
[1 2 1 2 3 1]
Run Code Online (Sandbox Code Playgroud)
当我第一次想到这样做时,我对自己很满意,因为它太简单了.但是,在使用更大的列表列表对其进行计时后,实际上执行此操作会更快:
>>> y = numpy.concatenate([numpy.array(i) for i in x])
>>> print(y)
[1 2 1 2 3 1]
Run Code Online (Sandbox Code Playgroud)
请注意,@ Bastiaan的答案#1没有一个连续的列表,因此我添加了concatenate
.
无论如何......我更喜欢这种hstack
方法,因为它优雅地使用了Numpy.
Rik*_*ggi 23
它很简单:
>>> lists = [[1, 2], [3, 4]]
>>> np.array(lists)
array([[1, 2],
[3, 4]])
Run Code Online (Sandbox Code Playgroud)
OP 指定“行是单独的子列表,每行包含子列表中的元素”。
假设不禁止使用numpy
(假设OP中已经添加了flair numpy),请使用vstack
:
import numpy as np
list_of_lists= [[1, 2, 3], [4, 5, 6], [7 ,8, 9]]
array = np.vstack(list_of_lists)
# array([[1, 2, 3],
# [4, 5, 6],
# [7, 8, 9]])
Run Code Online (Sandbox Code Playgroud)
或更简单(如另一个答案中提到的),
array = np.array(list_of_lists)
Run Code Online (Sandbox Code Playgroud)
再一次,在搜索将具有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
Run Code Online (Sandbox Code Playgroud)