我理解您正在寻找仅使用numpy
的解决方案。然而,如果允许,还有一种可能性是将more_itertools
与ravel()
或reshape(-1)
或flatten()
一起使用:
>>> import more_itertools
>>> list(more_itertools.flatten(([x.reshape(-1) for x in myarrs])))
对比:
原始解决方案
%timeit -n 100000 np.hstack([np.hstack(i) for i in myarrs])
> 31.6 µs ± 1.16 µs per loop (mean ± std. dev. of 7 runs, 100000 loops each)
norok2提供的解决方案(最快)
%timeit -n 100000 np.concatenate([x.ravel() for x in myarrs])
> 2.62 µs ± 54.6 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
使用
more_itertools
+
reshape(-1)
的解决方案
%timeit -n 100000 list(more_itertools.flatten(([x.reshape(-1) for x in myarrs])))
> 9.32 µs ± 255 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
使用more_itertools
+ravel()
的解决方案。
%timeit -n 100000 list(more_itertools.flatten(([x.ravel() for x in myarrs])))
> 7.33 µs ± 235 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
使用
more_itertools
+
flatten()
的解决方案
%timeit list(more_itertools.flatten(([x.flatten() for x in myarrs])))
> 8.3 µs ± 65.5 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
np.hstack([i.ravel() for i in myarrs2])
可以更高效地实现。因为ravel是一个视图,所以比你现在使用的内部hstack更好。但目前还没有内置的方法。 - Divakar