np.ndarray.flatten不拉平
np.ndarray.flatten does not 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]
您可能无意中创建了一个一维对象数组,可能是通过包含类似于以下代码的不同长度的行。
>>> 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
是如何处理数据的。维数和其他属性也是如此。
出于某些奇怪的原因,在某些特定情况下,我的 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]
您可能无意中创建了一个一维对象数组,可能是通过包含类似于以下代码的不同长度的行。
>>> 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
是如何处理数据的。维数和其他属性也是如此。