簡體   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