我遇到了以某种方式重新堆叠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中的列表理解非常慢。有更快的方法吗?
谢谢!
答案 0 :(得分:1)
我们可以使用np.transpose
置换轴,然后重新塑造 -
arr.transpose(0,2,1,3).reshape(2,3,-1)