有效地重新堆叠numpy ndarray

时间:2016-07-21 16:08:35

标签: python numpy optimization transform

我遇到了以某种方式重新堆叠numpy ndarray的问题。我想重新堆叠内部2D矩阵,使列彼此相邻。例如,如果这是我的输入:

>>> k.shape
(2, 3, 3, 2)
>>> k
array([[[[ 7.,  6.],
         [ 7.,  5.],
         [ 5.,  5.]],

        [[ 2.,  7.],
         [ 5.,  2.],
         [ 7.,  1.]],

        [[ 9.,  1.],
         [ 7.,  1.],
         [ 2.,  6.]]],


       [[[ 5.,  8.],
         [ 9.,  6.],
         [ 3.,  7.]],

        [[ 8.,  2.],
         [ 2.,  8.],
         [ 4.,  4.]],

        [[ 8.,  9.],
         [ 5.,  9.],
         [ 2.,  4.]]]], dtype=float32)

我知道我需要知道np.hstack,我只是不知道如何做得好。这就是我目前的工作方式,这就是我想要的样子:

>>> np.array([np.hstack(j) for j in k])
array([[[ 7.,  6.,  2.,  7.,  9.,  1.],
    [ 7.,  5.,  5.,  2.,  7.,  1.],
    [ 5.,  5.,  7.,  1.,  2.,  6.]],

   [[ 5.,  8.,  8.,  2.,  8.,  9.],
    [ 9.,  6.,  2.,  8.,  5.,  9.],
    [ 3.,  7.,  4.,  4.,  2.,  4.]]], dtype=float32)

你可以这样想象:我有2张尺寸为3x2的图像,每张图像有3个通道。我想将每个图像的所有通道水平堆叠在一起。

如果示例有点奇怪,我道歉,但我正在使用的数据并没有比这更简单。

python中的列表理解非常慢。有更快的方法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

我们可以使用np.transpose置换轴,然后重新塑造 -

arr.transpose(0,2,1,3).reshape(2,3,-1)