numpy重塑是如何工作的?

dnt*_*nth 5 python arrays numpy

我有一个numpy数组中的数据:

a = np.arange(100)
a = a.reshape((20,5))
Run Code Online (Sandbox Code Playgroud)

当我输入

a[:10]
Run Code Online (Sandbox Code Playgroud)

它返回

array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24],
       [25, 26, 27, 28, 29],
       [30, 31, 32, 33, 34],
       [35, 36, 37, 38, 39],
       [40, 41, 42, 43, 44],
       [45, 46, 47, 48, 49]])
Run Code Online (Sandbox Code Playgroud)

现在我决定将数组重塑为3d数组.

b = a.reshape((5,4,5))

array([[[ 0,  1,  2,  3,  4],
    [ 5,  6,  7,  8,  9],
    [10, 11, 12, 13, 14],
    [15, 16, 17, 18, 19]],

   [[20, 21, 22, 23, 24],
    [25, 26, 27, 28, 29],
    [30, 31, 32, 33, 34],
    [35, 36, 37, 38, 39]],

   [[40, 41, 42, 43, 44],
    [45, 46, 47, 48, 49],
    [50, 51, 52, 53, 54],
    [55, 56, 57, 58, 59]],

   [[60, 61, 62, 63, 64],
    [65, 66, 67, 68, 69],
    [70, 71, 72, 73, 74],
    [75, 76, 77, 78, 79]],

   [[80, 81, 82, 83, 84],
    [85, 86, 87, 88, 89],
    [90, 91, 92, 93, 94],
    [95, 96, 97, 98, 99]]])
Run Code Online (Sandbox Code Playgroud)

如何将b切片到我获得像[:10]这样的值?我试过了

b[:10,0,:5]
array([[ 0,  1,  2,  3,  4],
       [10, 11, 12, 13, 14],
       [20, 21, 22, 23, 24],
       [30, 31, 32, 33, 34],
       [40, 41, 42, 43, 44],
       [50, 51, 52, 53, 54],
       [60, 61, 62, 63, 64],
       [70, 71, 72, 73, 74],
       [80, 81, 82, 83, 84],
       [90, 91, 92, 93, 94]])
Run Code Online (Sandbox Code Playgroud)

但它不正确.先感谢您!

xnx*_*xnx 6

使用时b = a.reshape((5,4,5)),只需为阵列使用的相同数据创建不同的视图a.(a即将出现对元素的更改b).reshape()在这种情况下不会复制数据,所以这是一个非常快速的操作.切片b和切片a访问相同的内存,因此不需要为b数组提供不同的语法(只需使用a[:10]).如果您已经创建了数据的副本,可能使用np.resize()和丢弃a,只需重新塑造b:b.reshape((20,5))[:10].