分割四维np.数组变成三维np.第四维数组



如果这个问题已经在其他地方得到了回答,我深表歉意。我找了两天也没找到。这似乎是一个相当简单的问题,虽然我不能解决它。

我有一个形状为(40, 320, 320, 8)的四维numpy数组。该数组是CNN卷积层的输出,其中维度1表示模型的40个输入的输出,维度2和3表示给定滤波器的特征映射输出,维度4表示卷积层中使用的8个滤波器。我的python经验还很新手。

我要做的是将这个4维数组拆分为8个独立的3维数组,其中每个新数组对应于4维中表示的8个过滤器中的一个。

目前,我可以用下面的....

一次完成一个filter_out = squeeze(intermediate_output[:,:,:,1])

我怎么能一次对所有8个(或n个)做这个?

由于需要一个数组列表,因此使用直接的推导式并没有什么害处。

alist = [arr[...,i] for i in range(8)]

list换位和包装不会更快,因为list(...)只是在第一个维度上迭代。Array split也迭代取切片。

不需要squeeze-除非使用np.split

但是你真的需要单独的数组吗?

这将生成一个三维数组列表:

list(intermediate_output.transpose(3, 0, 1, 2))

另一种可能:

split_array_list = [x.squeeze() for x in np.split(my_array, my_array.shape[-1])]

最新更新