[英]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 array
的x 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.