将数组的最后一维拆分为低维数组

Ima*_*ngo 5 split numpy

假设我们有一个带NxMxD形状的数组。我想得到一个带有D NxM数组的列表。

正确的做法是:

np.dsplit(myarray, D)
Run Code Online (Sandbox Code Playgroud)

但是,这将返回D NxMx1数组。

我可以通过执行以下操作来达到预期的结果:

[myarray[..., i] for i in range(D)]
Run Code Online (Sandbox Code Playgroud)

或者:

[np.squeeze(subarray) for subarray in np.dsplit(myarray, D)]
Run Code Online (Sandbox Code Playgroud)

但是,我觉得需要执行额外的操作有点多余。我是否缺少任何numpy返回所需结果的函数?

plo*_*ser 4

尝试D.swapaxes(1,2).swapaxes(1,0)

>>>import numpy as np
>>>a = np.arange(24).reshape(2,3,4)
>>>a
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]]])

>>>[a[:,:,i] for i in range(4)]
[array([[ 0,  4,  8],
       [12, 16, 20]]),
 array([[ 1,  5,  9],
       [13, 17, 21]]),
 array([[ 2,  6, 10],
       [14, 18, 22]]),
 array([[ 3,  7, 11],
       [15, 19, 23]])]

>>>a.swapaxes(1,2).swapaxes(1,0)
array([[[ 0,  4,  8],
        [12, 16, 20]],

       [[ 1,  5,  9],
        [13, 17, 21]],

       [[ 2,  6, 10],
        [14, 18, 22]],

       [[ 3,  7, 11],
        [15, 19, 23]]])
Run Code Online (Sandbox Code Playgroud)

编辑:正如 ajcr 所指出的(再次感谢),该transpose命令更方便,因为可以通过使用一步完成两次交换

D.transpose(2,0,1)
Run Code Online (Sandbox Code Playgroud)

  • 除了“a.swapaxes(1,2).swapaxes(1,0)”之外,您还可以编写“a.transpose(2,0,1)”。 (3认同)