2D阵列的4D阵列

时间:2017-12-21 16:24:01

标签: python arrays numpy

我有一定数量的Numpy数组,其形状为

print(x.shape)
>>>(256,256)

如何堆叠它们以便形状

print(y.shape)
>>>(certainnumber,256,256,1)

我一直在尝试使用np.stack和np.concatenate,但我只能解决轴错误或类似

的问题
print(y.shape)
>>>(anothernumber,256) 

3 个答案:

答案 0 :(得分:3)

方法#1

这是一个np.stack -

np.stack(list_of_arrays)[...,None]

方法#2

您可以为每个阵列添加None/np.newaxis的新轴,并沿{1}}形状的第一轴连接,如下所示 -

(certainnumber,256,256)

然后,添加新轴作为最终np.concatenate([i[None] for i in list_of_arrays],axis=0) 形状的尾随轴,如此 -

(certainnumber,256,256,1)

示例运行

np.concatenate([i[None] for i in list_of_arrays],axis=0)[...,None]

答案 1 :(得分:2)

假设您的数组位于某种容器中(您可以将它们放在容器中):

>>> ax = [np.random.randint(0, 10, (3,3)) for _ in range(4)]
>>> ax
[array([[0, 3, 1],
       [4, 2, 4],
       [2, 2, 8]]), array([[8, 4, 6],
       [7, 1, 4],
       [8, 9, 8]]), array([[6, 3, 8],
       [4, 6, 8],
       [2, 2, 9]]), array([[1, 8, 1],
       [0, 9, 2],
       [9, 2, 3]])]

所以,你可以使用np.concatenate,但你也必须重塑:

>>> final = np.concatenate([arr.reshape(1, 3,3,1) for arr in ax], axis=0)

结果:

>>> final.shape
(4, 3, 3, 1)
>>> final
array([[[[0],
         [3],
         [1]],

        [[4],
         [2],
         [4]],

        [[2],
         [2],
         [8]]],


       [[[8],
         [4],
         [6]],

        [[7],
         [1],
         [4]],

        [[8],
         [9],
         [8]]],


       [[[6],
         [3],
         [8]],

        [[4],
         [6],
         [8]],

        [[2],
         [2],
         [9]]],


       [[[1],
         [8],
         [1]],

        [[0],
         [9],
         [2]],

        [[9],
         [2],
         [3]]]])
>>>

修改

受@Divakar的启发,更具通用性:

np.concatenate([arr[None,..., None] for arr in ax], axis=0)

答案 2 :(得分:1)

您可以向axis添加np.stack参数,以指定要堆叠的轴:

arrs = [np.random.rand(256, 256) for i in range(11)]
out = np.stack(arrs, axis=0)
out.shape
# (11, 256, 256)

(请注意,轴默认为零)。

如果您需要在形状的末尾添加一个,请使用newaxis

out[..., np.newaxis].shape
(11, 256, 256, 1)