如何在 Numpy 中将数组展平为矩阵?

Posted

技术标签:

【中文标题】如何在 Numpy 中将数组展平为矩阵?【英文标题】:How to flatten an array to a matrix in Numpy? 【发布时间】:2018-12-12 16:09:27 【问题描述】:

我正在寻找一种优雅的方法,基于指定要保留的维度的单个参数将任意形状的数组展平为矩阵。为了说明,我想

def my_func(input, dim):
    # code to compute output
    return output

例如给定一个input 形状2x3x4 的数组,output 应该是dim=0 一个形状12x2 的数组;对于dim=1 形状数组8x3;对于dim=2 一个形状数组6x8。如果我只想展平最后一个维度,那么这很容易通过

input.reshape(-1, input.shape[-1])

但我想添加添加 dim 的功能(优雅地,无需遍历所有可能的情况 + 检查 if 条件等)。可以通过首先交换维度,使感兴趣的维度在尾随,然后应用上述操作。

有什么帮助吗?

【问题讨论】:

有对应的转置吗? 【参考方案1】:

我们可以置换轴和重塑 -

# a is input array; axis is input axis/dim
np.moveaxis(a,axis,-1).reshape(-1,a.shape[axis])

从功能上讲,它基本上是将指定的轴向后推,然后保持该轴长度形成第二个轴,然后合并其余轴形成第一个轴。

示例运行 -

In [32]: a = np.random.rand(2,3,4)

In [33]: axis = 0

In [34]: np.moveaxis(a,axis,-1).reshape(-1,a.shape[axis]).shape
Out[34]: (12, 2)

In [35]: axis = 1

In [36]: np.moveaxis(a,axis,-1).reshape(-1,a.shape[axis]).shape
Out[36]: (8, 3)

In [37]: axis = 2

In [38]: np.moveaxis(a,axis,-1).reshape(-1,a.shape[axis]).shape
Out[38]: (6, 4)

【讨论】:

谢谢。为我工作。

以上是关于如何在 Numpy 中将数组展平为矩阵?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP 中将多维数组“展平”为简单数组? [复制]

如何在 PHP 中将多维数组“展平”为简单数组? [复制]

如何展平 numpy 数组的最后两个维度? [复制]

Numpy 数组:连接展平和添加维度

如何按希尔伯特曲线的顺序将二维矩阵(n x n)展平为一维数组?

如何在python中将列表保存为numpy数组?