Python:如何重塑具有各种尺寸的多维数组?

时间:2018-11-13 20:30:13

标签: python numpy reshape

假设我有一个像这样的数组

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

我想将其重塑为

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

在Python中有一种简单的方法吗?我知道如果第二维在整个数据中都相同的话,这非常容易,但是在我的情况下,第二维的长度分别是2和3。

非常感谢。

3 个答案:

答案 0 :(得分:0)

如果您有这样的列表:

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循环和列表理解将动态适应任何大小的列表。

答案 1 :(得分:0)

我们可以质疑这是列表列表还是多维数组,但是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]]

答案 2 :(得分:0)

您可以使用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]]]