在NumPy中重塑数组

考虑以下形式的数组(仅作为示例):


[[ 0  1]

 [ 2  3]

 [ 4  5]

 [ 6  7]

 [ 8  9]

 [10 11]

 [12 13]

 [14 15]

 [16 17]]

它的形状是[9,2]。现在,我想对数组进行变换,以使每一列变成一个形状[3,3],如下所示:


[[ 0  6 12]

 [ 2  8 14]

 [ 4 10 16]]

[[ 1  7 13]

 [ 3  9 15]

 [ 5 11 17]]

最明显的方法(肯定是“非Python的”)是用适当的维数初始化零数组并运行两个for循环,在该循环中将用数据填充数据。我对符合语言的解决方案感兴趣...


小唯快跑啊
浏览 570回答 3
3回答

慕少森

a = np.arange(18).reshape(9,2)b = a.reshape(3,3,2).swapaxes(0,2)# a: array([[ 0,  1],       [ 2,  3],       [ 4,  5],       [ 6,  7],       [ 8,  9],       [10, 11],       [12, 13],       [14, 15],       [16, 17]])# b:array([[[ 0,  6, 12],        [ 2,  8, 14],        [ 4, 10, 16]],       [[ 1,  7, 13],        [ 3,  9, 15],        [ 5, 11, 17]]])

人到中年有点甜

numpy具有完成此任务的出色工具(“ numpy.reshape”)链接,用于重塑文档a = [[ 0  1] [ 2  3] [ 4  5] [ 6  7] [ 8  9] [10 11] [12 13] [14 15] [16 17]]`numpy.reshape(a,(3,3))`您也可以使用“ -1”把戏`a = a.reshape(-1,3)`“ -1”是通配符,当第二维为3时,它将使numpy算法决定要输入的数字所以是..这也可以工作: a = a.reshape(3,-1)而这: a = a.reshape(-1,2) 无能为力这: a = a.reshape(-1,9) 将形状更改为(2,9)

慕容3067478

有两种可能的结果重排(以下为@eumiro的示例)。Einops软件包提供了强有力的注释来明确描述此类操作>> a = np.arange(18).reshape(9,2)# this version corresponds to eumiro's answer>> einops.rearrange(a, '(x y) z -> z y x', x=3)array([[[ 0,  6, 12],        [ 2,  8, 14],        [ 4, 10, 16]],       [[ 1,  7, 13],        [ 3,  9, 15],        [ 5, 11, 17]]])# this has the same shape, but order of elements is different (note that each paer was trasnposed)>> einops.rearrange(a, '(x y) z -> z x y', x=3)array([[[ 0,  2,  4],        [ 6,  8, 10],        [12, 14, 16]],       [[ 1,  3,  5],        [ 7,  9, 11],        [13, 15, 17]]])
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python