在NumPy中重塑一个数组

use*_*864 39 python arrays numpy reshape

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

[[ 0  1]
 [ 2  3]
 [ 4  5]
 [ 6  7]
 [ 8  9]
 [10 11]
 [12 13]
 [14 15]
 [16 17]]
Run Code Online (Sandbox Code Playgroud)

它的形状是[9,2].现在我想转换数组,使每列成为一个形状[3,3],如下所示:

[[ 0  6 12]
 [ 2  8 14]
 [ 4 10 16]]
[[ 1  7 13]
 [ 3  9 15]
 [ 5 11 17]]
Run Code Online (Sandbox Code Playgroud)

最明显的(当然也是"非pythonic")解决方案是使用适当的维度初始化一个零数组,并运行两个for循环,其中将填充数据.我对符合语言的解决方案感兴趣...

eum*_*iro 62

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]]])
Run Code Online (Sandbox Code Playgroud)

  • 请注意,`b`现在不是连续的,这意味着它不能被重新整形:`b.reshape(9,2)`返回一个副本,而不是相同数据的视图,`b.shape =(9, 2)`会引发错误. (17认同)
  • 非常非常重要的@Jaime评论,因为Shape的重点是允许在没有克隆的情况下进行乐观的调整.对大量数据集很重要 (3认同)