np.ndarray.flatten不会变平

时间:2018-05-17 15:45:47

标签: python numpy flatten

由于一些奇怪的原因,在某些特定情况下,np.ndarray拒绝自我压扁。我可以区分的唯一方法(我检查了ndarray结构的方式)在不同的情况之间是拒绝扁平的ndarray比其他ndarray大得多。

无论如何,我相信永远不会发生以下行为,对吗?

>>> print(type(myVar))
<class 'numpy.ndarray'>
>>> print(myVar[0:2])
[array([1, 2]) array([5, 2])]
>>> print(myVar.flatten()[0:2])
[array([1, 2]) array([5, 2])]

这里发生了什么?为什么我的阵列没有变平?它应输出:

[1 2]

1 个答案:

答案 0 :(得分:2)

您可能无意中创建了一维对象数组,可能包含了与以下代码类似的不同长度的行。

>>> t = array([randint(0,3,2) for _ in range(3)] + [3])
>>> print(t[0:2])
[array([0, 0]) array([1, 2])]

如果你检查数组而不是打印它,这就显而易见了(请注意dtype=object)。

>>> t
array([array([0, 0]), array([1, 2]), array([1, 1]), 3], dtype=object)

它会使你看到的行为变平,这是对象数组的正确行为。

>>> t.flatten()[0:2]
array([array([0, 0]), array([1, 2])], dtype=object)

编辑请勿打印数组并尝试猜测形状,请使用myVar.shape。这将告诉您numpy如何处理数据。维度和其他属性的数量相同。