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

标签 numpy split

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

正确的做法是:

np.dsplit(myarray, D)

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

我可以通过执行以下操作来达到预期的结果:
[myarray[..., i] for i in range(D)]

或者:
[np.squeeze(subarray) for subarray in np.dsplit(myarray, D)]

但是,我觉得需要执行额外的操作有点多余。我有没有遗漏 numpy返回所需结果的函数?

最佳答案

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

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

关于numpy - 将数组的最后一维拆分为低维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28989812/

相关文章:

python - 填充 numpy 数组

python - list.pop 的 numpy 等价物?

python - 如何将数组项本身转换为数组Python

c - 逐行读取数字并将其拆分为 C 中的多个变量

vim - Vim 中的拆分窗口

python-2.7 - Python 2.7 如何使用 str.split() 将字符串转换为函数外部的列表?

java - 分割字符串并删除存储在数组中的逗号 - Java

python - numpy中的flatten和ravel函数有什么区别?

C 将逗号分隔的字符串转换为数组

numpy - scipy.sparse.linalg : what's the difference between splu and factorized?