如何在 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 中将数组展平为矩阵?的主要内容,如果未能解决你的问题,请参考以下文章