簡體   English   中英

將列表列表轉換為二維 numpy 數組

[英]Converting a list of lists into a 2D numpy array

我有一個列表 X,其中包含一個列表列表......例如

X = [ [[], [], [], []], [[], [] ,[], []] ]

當我嘗試使用np.array()將上面 (X) 的這個列表轉換為一個 numpy 數組時,我得到以下信息:

array([list([[],[],[],[]]),
list([list([[],[],[],[]]),....) 

名單上的雙關語是*。

我在這里做錯了什么? 我只需要一個普通的數組形式,這樣我就可以以列表不允許的方式索引它(即array[:,1]

如果您的列表長度不同(在每個嵌套維度中),您不能對 NumPy 數組進行傳統轉換,因為二維或更高版本的 NumPy 數組必須在其第一維中具有相同數量的元素。

所以你不能直接將[[1,2],[3,4,5]]轉換為 numpy 數組。 應用np.array將為您提供一個 2 元素的 numpy 數組,其中每個元素都是一個列表對象,如 - array([list([1, 2]), list([3, 4, 5])], dtype=object) 我相信這就是您面臨的問題。

你不能創建一個 2D 矩陣,例如看起來像 -

[[1,2,3,?],
 [4,5,6,7]]

您可能需要做的是在轉換為 NumPy 數組之前將每個列表列表的元素填充到固定長度(每個維度的長度相等)。

我建議按照我在下面編寫的代碼中所做的那樣迭代每個列表列表,以扁平化您的數據,然后按照您想要的方式對其進行轉換。


如果您的列表長度相同,那么 numpy 1.18.5或更高版本應該沒有問題。

a = [[[1,2],[3,4]],[[5,6],[7,8]]]
np.array(a)
array([[[1, 2],
        [3, 4]],

       [[5, 6],
        [7, 8]]])

但是,如果您仍然無法使用列表列表,那么您可能需要先遍歷每個元素以展平列表,然后將其更改為具有所需形狀的 numpy 數組,如下所示 -

a = [[[1,2],[3,4]],[[5,6],[7,8]]]
flat_a = [item for sublist in a for subsublist in sublist for item in subsublist]
np.array(flat_a).reshape(2,2,2)
array([[[1, 2],
        [3, 4]],

       [[5, 6],
        [7, 8]]])

嘗試這個:

>>> import numpy as np
>>> a = np.array([[[1,2],[3,4],[5,6]],[[7,8],[9,10],[11,12]]])
>>> a
array([[[ 1,  2],
        [ 3,  4],
        [ 5,  6]],

       [[ 7,  8],
        [ 9, 10],
        [11, 12]]])
>>> a.reshape(4,-1)
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12]])


>>> a.reshape(1,-1)
array([[ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12]])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM