<p>我继续归纳了yatu对我在实践中面临的情况的回答,在这种情况下,维度的数量是任意的。以下是我所拥有的:</p>
<pre><code>import numpy as np
from itertools import zip_longest
def interleave(*a):
#creating padding array of NaNs
fill_shape = a[0].shape[1:]
fill_array = np.full(fill_shape,np.nan)
l = *zip_longest(*a, fillvalue=fill_array),
# build a 2d array from the list
out = np.concatenate(l)
# return non-NaN values
tup = (0,)*(len(out.shape)-1)
return out[~np.isnan(out[(...,)+tup])]
</code></pre>
<p>测试:</p>
<pre><code>b1 = np.array(
[
[[111,112,113],[121,122,123]],
[[411,412,413],[421,422,423]]
])
b2=np.array(
[
[[211,212,213],[221,222,223]],
[[511,512,513],[521,522,523]],
[[711,712,713],[721,722,712]],
[[911,912,913],[921,922,923]],
[[1011,1012,1013],[1021,1022,1023]]
])
b3=np.array(
[
[[311,312,313],[321,322,323]],
[[611,612,613],[621,622,623]],
[[811,812,813],[821,822,823]]
])
In [1]: interleave(b1,b2,b3)
Out [1]: [[[ 111. 112. 113.]
[ 121. 122. 123.]]
[[ 211. 212. 213.]
[ 221. 222. 223.]]
[[ 311. 312. 313.]
[ 321. 322. 323.]]
[[ 411. 412. 413.]
[ 421. 422. 423.]]
[[ 511. 512. 513.]
[ 521. 522. 523.]]
[[ 611. 612. 613.]
[ 621. 622. 623.]]
[[ 711. 712. 713.]
[ 721. 722. 712.]]
[[ 811. 812. 813.]
[ 821. 822. 823.]]
[[ 911. 912. 913.]
[ 921. 922. 923.]]
[[1011. 1012. 1013.]
[1021. 1022. 1023.]]]
</code></pre>
<p>欢迎任何建议!特别是,在我的应用程序中,空间而不是时间是限制因素,所以我想知道是否有一种方法可以使用更少的内存(数据集沿着合并轴很大)。你知道吗</p>