np.ndarray.flatten не выравнивается - PullRequest
0 голосов
/ 17 мая 2018

По какой-то странной причине, в каком-то конкретном случае мой np.ndarray отказывается сгладить себя.Единственный способ, которым я могу различить (я проверил, как структурированы ndarrays) между различными случаями, состоит в том, что ndarray, который отказывается сглаживать, намного больше, чем другие ndarrays.

В любом случае, я считаю, что следующее поведение должноникогда не происходит, верно?

>>> 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 голосов
/ 17 мая 2018

Вероятно, вы случайно создали одномерный массив объектов, возможно, включив строки различной длины, подобные приведенному ниже коду.

>>> 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)

И это даст поведение, которое вы видите с flatten, что является правильным поведением для массива объектов.

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

edit Не печатайте массив и не пытайтесь угадать форму, используйте myVar.shape. Это скажет вам точно, как numpy обрабатывает данные. То же самое для количества размеров и других свойств.

...