我有若干个形状为Numpy数组
print(x.shape)
>>>(256,256)
如何堆叠它们以使形状为:
print(y.shape)
>>>(certainnumber,256,256,1)
我一直在尝试使用np.stack和np.concatenate,但是我只得到了轴错误或类似的东西
print(y.shape)
>>>(anothernumber,256)
方法 #1
这里有一个使用np.stack
的方法 -
np.stack(list_of_arrays)[...,None]
方法 #2
您可以为这些数组中的每一个使用None/np.newaxis
添加新轴,并沿着第一个轴进行连接,以得到(特定数字,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]
示例运行
In [32]: a = np.random.rand(3,4)
In [33]: b = np.random.rand(3,4)
In [34]: list_of_arrays = [a,b]
In [42]: np.stack(list_of_arrays)[...,None].shape
Out[42]: (2, 3, 4, 1)
In [35]: np.concatenate([i[None] for i in list_of_arrays],axis=0)[...,None].shape
Out[35]: (2, 3, 4, 1)
>>> 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)
out = np.append(out,ar[None,...], axis=0)
,其中ar是另一个数组。 - Borisnp.stack
中添加一个 axis
参数来指定你想要沿着哪个轴进行堆叠: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)
axis=0
工作 :) 因此,我们可以跳过该轴参数,但我想这对于解释很有好处。 - Divakar