由于一些奇怪的原因,在某些特定情况下,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]
答案 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
如何处理数据。维度和其他属性的数量相同。