回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我想沿着一个特定的轴交错多个不同尺寸的numpy数组。特别是,我有一个shape <code>(_, *dims)</code>数组的列表,沿着第一个轴变化,我想将其交错以获得另一个shape <code>(_, *dims)</code>数组。例如,给定输入</p>
<pre><code>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)
</code></pre>
<p>期望的输出是</p>
<pre><code>np.array([[11,12], [21,22], [31,32], [41,42], [51,52], [61,62], [71,72], [81,82], [91,92], [101,102]]
</code></pre>
<p>在前面文章(如<a href="https://stackoverflow.com/questions/47430784/numpy-concatenate-arrays-with-interleaving">Numpy concatenate arrays with interleaving</a>)的帮助下,当数组沿第一维度匹配时,我就可以工作了:</p>
<pre><code>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)
</code></pre>
<p>不幸的是,如果输入形状在第一个维度上不匹配,上面的抛出一个异常,因为我们必须沿着一个不同于不匹配的轴连接。实际上,我看不到任何有效使用连接的方法,因为沿着不匹配的轴连接会破坏生成所需输出所需的信息。你知道吗</p>
<p>我的另一个想法是用空条目填充输入数组,直到它们的形状与第一个维度匹配,然后在一天结束时删除空条目。虽然这会奏效,但我不确定如何最好地实施它,而且似乎一开始就没有必要这样做。你知道吗</p>