簡體   English   中英

Python:如何重塑具有各種尺寸的多維數組?

[英]Python: How to reshape a multidimensional array with various dimensions?

假設我有一個像這樣的數組

[[1,2],[3,4,5]]

我想重塑它

[[[1],[2]],[[3],[4],[5]]]

在Python中有一種簡單的方法嗎? 我知道如果第二維在整個數據中都相同的話,這非常容易,但是在我的情況下,第二維的長度分別是2和3。

非常感謝。

如果您有這樣的列表:

nested = [[1,2], [3,4,5]]

您可以像這樣將其拆分:

nested_split = [[[single_elt] for single_elt in inside_list] for inside_list in nested]

調用print時,將為您提供以下輸出:

[[[1], [2]], [[3], [4], [5]]]

內部或外部列表的維數不會以任何方式影響此解決方案,因為使用for循環和列表理解將動態地容納任何大小的列表。

我們可以質疑這是列表列表還是多維數組,但是concateante可以很好地將其展平為一concateante數組:

In [173]: alist = [[1,2], [3,4,5]]
In [175]: np.concatenate(alist, axis=0)
Out[175]: array([1, 2, 3, 4, 5])

然后很容易將其重塑為(5,1)形狀數組:

In [176]: np.concatenate(alist, axis=0).reshape(-1,1)
Out[176]: 
array([[1],
       [2],
       [3],
       [4],
       [5]])

有一些平整列表列表的習慣用法,但是由於您將其標記為numpy,因此numpy方法更為明顯。

In [177]: import itertools
In [178]: list(itertools.chain(*alist))
Out[178]: [1, 2, 3, 4, 5]
In [180]: [[x] for x in itertools.chain(*alist)]
Out[180]: [[1], [2], [3], [4], [5]]

您可以將x for x in arrayx for x in array機制:

>>> a = [[1,2], [3,4,5]]
>>> [[[a2] for a2 in a1] for a1 in a]
[[[1], [2]], [[3], [4], [5]]]

暫無
暫無

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

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