【问题标题】:Efficiently re-stacking a numpy ndarray有效地重新堆叠一个 numpy ndarray
【发布时间】:2016-07-21 16:08:35
【问题描述】:

我在以某种方式重新堆叠 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 中的列表理解真的很慢。有没有更快的方法来做到这一点?

谢谢!

【问题讨论】:

  • 只需重塑所需的形状。
  • 重塑不会重新水平堆叠列,所以这是不可能的......
  • @Divakar,对不起,我的例子很糟糕,因为它没有传达我想要做的事情。我希望它现在更有意义。我正在尝试以某种方式重新堆叠列。
  • 你能把你想要的最终数组和现在的数组分开吗?
  • 可能类似于:arr.transpose(0,2,1,3).reshape(2,3,-1).

标签: python numpy optimization transform


【解决方案1】:

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

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

【讨论】:

  • 谢谢。我觉得你从来没有得到你应得的荣誉。
  • @cᴏʟᴅsᴘᴇᴇᴅ 啊,我刚刚注意到你的帖子有相同的内容。现在我猜为时已晚。
猜你喜欢
  • 2021-04-07
  • 2021-07-07
  • 2021-10-15
  • 2017-12-07
  • 1970-01-01
  • 2018-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多