如果这个问题已经在其他地方得到了回答,我深表歉意。我找了两天也没找到。这似乎是一个相当简单的问题,虽然我不能解决它。
我有一个形状为(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])]