繁体   English   中英

如何从 python 中的列表创建二维数组?

[英]How to create a 2D array from a list of list in python?

我有一个看起来像这样的列表列表:

arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]

我想创建一个 2 x 2 数组,前 2 个元素位于顶部,后两个元素位于底部,如下所示:

[1, 2, 3], [4, 5, 6]
[7, 8, 9], [10, 11, 12]

到目前为止,我尝试的是使用以下方法重塑:

np.array(arr).reshape(2,2)

但是,每当我这样做时,我都会得到一个ValueError:新数组的总大小必须保持不变我到底错过了什么或者我怎样才能让它工作?

尝试使用list推导:

nparr = np.array([arr[i:i + 2] for i in range(0, len(arr), 2)]
print(nparr)

Output:

[[[1 2 3] [4 5 6]]
 [[7 8 9] [10 11 12]]]

你可以用 go 来做这样的事情,它会reshapes numpy数组。

import numpy as np
arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
out = np.reshape(sum([], arr), (-1, 3))
print(out)

Output:

[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]

我认为您想要的并不是完全可能的,但这可以满足您的需求:

arr2 = [arr[:2], arr[2:]]
np.array(arr2)

这将返回如下内容:

[[[ 1  2  3]
  [ 4  5  6]]

 [[ 7  8  9]
  [10 11 12]]]

请注意, arr共有 12 个元素。 您不能使用 reshape 以 2,2 方式排列 12 个元素。

这是您可能的解决方案

 np.array(arr).reshape(2, 6)

Output

array([[ 1,  2,  3,  4,  5,  6],
       [ 7,  8,  9, 10, 11, 12]])

你想要什么似乎有些混乱:

In [93]: alist = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]

从列表中创建一个数组:

In [94]: np.array(alist)
Out[94]: 
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12]])
In [95]: _.shape
Out[95]: (4, 3)

总共有 12 个元素。 reshape必须匹配:

In [96]: np.array(alist).reshape(2,2,3)
Out[96]: 
array([[[ 1,  2,  3],
        [ 4,  5,  6]],

       [[ 7,  8,  9],
        [10, 11, 12]]])
In [97]: _.shape
Out[97]: (2, 2, 3)

接受的答案做同样的事情:

In [99]: np.array([alist[i:i + 2] for i in range(0, len(alist), 2)])
Out[99]: 
array([[[ 1,  2,  3],
        [ 4,  5,  6]],

       [[ 7,  8,  9],
        [10, 11, 12]]])

以嵌套列表形式:

In [100]: [alist[i:i + 2] for i in range(0, len(alist), 2)]
Out[100]: [[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]

在定义/显示 2 和 3d arrays 时,[] 比换行符和间距更重要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM