这似乎是一个足够简单的任务,但我还没有找到如何使用numpy
来完成它。考虑示例数组:
import numpy as np
aa = np.array([np.array([13.16]), np.array([1.58 , 1.2]), np.array([13.1]), np.array([1. , 2.6])], dtype=object)
我需要一种通用的方法将该数组展平为N
元素的单个数组,并N=every float in all the sub-arrays
。在这种情况下,它将是:
aa = np.array([13.16, 1.58 , 1.2, 13.1, 1. , 2.6])
我已经尝试了np.ndarray.flatten()
(尝试了所有'顺序'选项))但我恢复了相同的aa
数组。
为什么np.ndarray.flatten()
无效,我该如何实现?
解决方案应该尽可能通用,因为我在这里使用的示例aa
数组实际上将在我的实际代码中填充不同长度的子数组。
答案 0 :(得分:5)
您可以使用numpy.hstack
>>> np.hstack(aa)
array([13.16, 1.58, 1.2 , 13.1 , 1. , 2.6 ])
答案 1 :(得分:1)
如果所有子数组都是一维的,你也可以使用np.concatenate
来节省一点时间。据我了解,np.hstack
是 np.concatenate
的包装器,如果输入是 1D,则简化为相同的操作。
np.concatenate(aa)
# array([13.16, 1.58, 1.2 , 13.1 , 1. , 2.6 ])
np.allclose(np.concatenate(aa), np.hstack(aa))
# True
%timeit np.hstack(aa)
5.53 µs ± 28.2 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%timeit np.concatenate(aa)
2.2 µs ± 46.5 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)