我希望可以沿着特定轴交错多个具有不同维度的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)
期望的输出结果将会是:
np.array([[11,12], [21,22], [31,32], [41,42], [51,52], [61,62], [71,72], [81,82], [91,92], [101,102]]
在之前的帖子(例如Numpy concatenate arrays with interleaving)的帮助下,当数组沿第一维匹配时,我已经让它正常工作:
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)
很遗憾,如果输入形状在第一维上不匹配,则以上操作会抛出异常,因为我们必须沿着与不匹配的轴不同的轴连接。事实上,我没有看到任何有效使用连接的方法,因为沿着不匹配的轴连接将破坏我们需要产生所需输出的信息。
我想到的另一个想法是用空条目填充输入数组,直到它们的形状在第一维上匹配,然后在最后一天删除空条目。虽然这样做可以解决问题,但我不确定如何最好地实现它,而且似乎在第一次就不应该这样做。
np.choose
在这里的行为似乎与预期不太一致。对于索引列表 [a_i],它会选择第 (a_i) 个数组的第 i 行,但我们希望它选择第 (a_i) 个数组中_下一个未选择的行_。 - user78729