如何将二维列表转换为二维NumPy数组?

104

我有一个类似于以下的二维列表:

a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 

我想将其转换为2d numpy数组。我们能否在不分配内存的情况下完成此操作?

numpy.zeros((3,3))

然后将值存储到其中?


@Donkopotamus,这是我的错误...我给出了一个序列...我也在做同样的事情,但是却得到了错误。后来我从这里得到了相同的代码,我检查了问题所在...所以它帮了我...当然,在发布之前我会检查文档...感谢友好的提醒。 - Shan
4个回答

116

只需将列表传递给 np.array

a = np.array(a)

如果默认值不符合要求,您还可以利用此机会设置dtype

a = np.array(a, dtype=...)

175
这个解决方案行不通。你会得到一个Python列表的NumPy数组。 - user1816847
67
只有当'sub'列表长度不同时才会发生这种情况(例如:[[1,2],[1,2],[1,2,3]])。它可以处理问题中给出的示例。 - compie
13
如果子数组长度不同,这个解决方案将只给出一个列表的numpy数组(即内部列表不会被转换为numpy数组)。这是有道理的,因为您不能拥有一个具有可变第二维的2D数组(矩阵)。 - Amir
谢谢您自2017年9月起(Ubuntu 16.04 LTS)的支持。这正是我所需要的。比预期的简单得多。 - SDsolar
1
感谢您的重要回答,@compie - iedmrc
1
如果您有一个数组列表,并且想要得到一个单一的数组,请使用np.concatenate(YOUR_LIST)。 - Pritesh Gohil

3

np.array()比unutbu上面说的更加强大。您还可以使用它将np数组列表转换为更高维度的数组,以下是一个简单的示例:

aArray=np.array([1,1,1])

bArray=np.array([2,2,2])

aList=[aArray, bArray]

xArray=np.array(aList)

xArray的形状为(2,3),它是一个标准的np数组。这个操作避免了循环编程。


2

只需使用以下代码

c = np.matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
matrix([[1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]])

然后它会给你一个结果

您可以使用以下代码检查矩阵的形状和维数

c.shape

c.ndim


1
我正在使用以Python文件形式导出的大型数据集。
XVals1 = [.........] 
XVals2 = [.........] 

每个列表的长度相同。我使用。
>>> a1 = np.array(SV.XVals1)

>>> a2 = np.array(SV.XVals2)

那么

>>> A = np.matrix([a1,a2])

4
这里的“SV”是什么意思? - gocen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接