将numpy数组展平

28
有没有一种简单的方式在NumPy中将类型对象数组展平?
我知道 .flatten() 方法可以展平由大小相同的数组构建的非对象类型数组:
I1 a = np.array([[1],[2],[3]])

I2 a.flatten()
O2 array([1, 2, 3])

然而,我无法获取dtype = object的数组展平:

I4 b
O4 array([[1], [2, 3], [3]], dtype=object)

I5 b.flatten()
O5 array([[1], [2, 3], [3]], dtype=object)

谢谢。


2
这个例子已经是最扁平的了(b.shape = (3,))!你所说的“flatten”具体指什么? - Henry Gomersall
1
是的,但实际上,我希望b变成[1,2,3,3]。 - Gökhan Sever
2个回答

61

如果你想要得到 [1,2,3,3],可以尝试这个方法:

np.hstack(b)

3
不错。我正要发布这个(它做的事情完全一样):[x for bb in b for x in bb] - Oriol Nieto
1
@urinieto 实际上,你发布的基于列表推导式的方法更快,尽管按照numpy的方式进行处理会更美观。 - nye17
@mgilson 是的,不过 np.array([x for bb in b for x in bb]) 也可以完成任务。 - nye17
@nye17,对我来说,可读性比速度更重要,因为绘图通常需要大部分时间。np.hstack(b)总共有12个字符,而后者则是它的两倍以上。至于不均匀性参数,那是我所拥有的数据的特性。hstack帮助我将它们组合在一起,以便我可以在不同计算对之间执行批量统计。 - Gökhan Sever
@GökhanSever 很好,那么 hstack 是正确的选择! - nye17
显示剩余3条评论

0

如果您的数组不包含多于一个嵌套数组,则np.hstack(arr)函数无法工作!

解决方法:

arr = np.array([[0]])
if arr.any():
    arr = np.hstack(arr)
else:
    arr = arr.flatten()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接