【发布时间】: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