Я использую функцию np.loadtxt()
и в зависимости от размера считываемого ввода выполняю определенные операции. Функция возвращает объект numpy.ndarray
определенной формы и длины. Например, для случаев 1 и 2 возвращается то, что я ожидал.
ДЕЛО 1:
Файл:
1
2
Выход:
returns: [1 2]
type: <class 'numpy.ndarray'>
shape: (2,)
length: 2
СЛУЧАЙ 2:
Файл: пусто
Выход:
returns: []
type: <class 'numpy.ndarray'>
shape: (0,)
length: 0
Однако, как и в случае 3, если в файле есть единственное значение, возвращаемое значение больше не является numpy.ndarray
объектом формы (1,)
, как в предыдущих случаях, а вместо этого numpy.ndarray
объектом со скаляром значение и форма ()
, что делает проверку формы действительно неудобной.
СЛУЧАЙ 3:
Файл:
1
Выход:
returns: 1 # and not [1]
type: <class 'numpy.ndarray'> # type remains the same which makes checking awkward
shape: ()
length: # producing error
Traceback (...)
Почему возвращается array(1)
с формой ()
вместо array([1])
с формой (1,)
? Есть ли в этом преимущество?
Чтобы было ясно, я знаю, что могу проверить ()
и преобразовать такие скаляры в массивы скаляров, но мне любопытно, почему это было выбранное поведение и есть ли более чистое решение для этого?