如何在numpy中沿着第三维展平?

时间:2016-04-26 01:20:02

标签: numpy

我有一个numpy的3d数组,我想要压缩成1d数组。我想要压扁每个2d"层"对于数组,将每个连续的层复制到1d数组中。

例如,对于包含arr[:, :, 0] = [[1, 2], [3, 4]]arr[:, :, 1] = [[5, 6], [7, 8]]的数组,我希望输出为[1, 2, 3, 4, 5, 6, 7, 8]

目前我有以下代码:

out = np.empty(arr.size)
for c in xrange(arr.shape[2]):
    layer = arr[:, :, c]
    out[c * layer.size:(c + 1) * layer.size] = layer.ravel()

有没有办法在numpy中有效地完成此任务(不使用for循环)?我试过弄乱reshapetransposeflatten无济于事。

2 个答案:

答案 0 :(得分:2)

我明白了:

out = arr.transpose((2, 0, 1)).flatten()

答案 1 :(得分:1)

或(最后的斧头将是第一个):np.rollaxis(a,-1).ravel()