我有一个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
循环)?我试过弄乱reshape
,transpose
和flatten
无济于事。
答案 0 :(得分:2)
我明白了:
out = arr.transpose((2, 0, 1)).flatten()
答案 1 :(得分:1)
或(最后的斧头将是第一个):np.rollaxis(a,-1).ravel()