使用不同维度

时间:2018-02-28 15:20:37

标签: python arrays numpy

这似乎是一个足够简单的任务,但我还没有找到如何使用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数组实际上将在我的实际代码中填充不同长度的子数组。

2 个答案:

答案 0 :(得分:5)

您可以使用numpy.hstack

>>> np.hstack(aa)
array([13.16,  1.58,  1.2 , 13.1 ,  1.  ,  2.6 ])

答案 1 :(得分:1)

如果所有子数组都是一维的,你也可以使用np.concatenate来节省一点时间。据我了解,np.hstacknp.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)