我有一定数量的Numpy数组,其形状为
print(x.shape)
>>>(256,256)
如何堆叠它们以便形状
print(y.shape)
>>>(certainnumber,256,256,1)
我一直在尝试使用np.stack和np.concatenate,但我只能解决轴错误或类似
的问题print(y.shape)
>>>(anothernumber,256)
答案 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)