为了账号安全,请及时绑定邮箱和手机立即绑定

在NumPy中重塑数组

在NumPy中重塑数组

小唯快跑啊 2019-12-27 15:29:28
考虑以下形式的数组(仅作为示例):[[ 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循环,在该循环中将用数据填充数据。我对符合语言的解决方案感兴趣...
查看完整描述

3 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

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]]])


查看完整回答
反对 回复 2019-12-27
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

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)


查看完整回答
反对 回复 2019-12-27
?
慕容3067478

TA贡献1773条经验 获得超3个赞

有两种可能的结果重排(以下为@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]]])


查看完整回答
反对 回复 2019-12-27
  • 3 回答
  • 0 关注
  • 569 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信