我想沿着特定的轴交错具有不同尺寸的多个numpy数组。特别是,我有一个(_, *dims)
沿第一轴变化的形状数组的列表,我想对其进行交织以获得另一个形状数组(_, *dims)
。例如,给定输入
a1 = np.array([[11,12], [41,42]])
a2 = np.array([[21,22], [51,52], [71,72], [91,92], [101,102]])
a3 = np.array([[31,32], [61,62], [81,82]])
interweave(a1,a2,a3)
Run Code Online (Sandbox Code Playgroud)
所需的输出将是
np.array([[11,12], [21,22], [31,32], [41,42], [51,52], [61,62], [71,72], [81,82], [91,92], [101,102]]
Run Code Online (Sandbox Code Playgroud)
借助先前的文章(例如Numpy带有交错的串联数组),当数组沿第一个维度匹配时,我就可以正常工作了:
import numpy as np
def interweave(*arrays, stack_axis=0, weave_axis=1):
final_shape = list(arrays[0].shape)
final_shape[stack_axis] = -1
# stack up arrays along the "weave axis", then reshape back to desired shape
return np.concatenate(arrays, axis=weave_axis).reshape(final_shape)
Run Code Online (Sandbox Code Playgroud)
不幸的是,如果输入形状沿第一维不匹配,则上面的方法会引发异常,因为我们必须沿着与不匹配的轴不同的轴进行连接。确实,我在这里看不到任何有效使用串联的方法,因为沿着不匹配的轴进行串联将破坏我们生成所需输出所需的信息。
我的另一个想法是用空条目填充输入数组,直到它们的形状沿第一个维度匹配,然后在一天结束时删除空条目。尽管这会起作用,但我不确定如何最好地实现它,而且似乎一开始就没有必要这样做。