Превращение странного странного поведения в datetime64 dtype - PullRequest
2 голосов
/ 15 марта 2012
import numpy
a = numpy.array([20090913, 20101020, 20110125])

Можете ли вы объяснить, почему numpy.datetime64(a.astype("S8").tolist()) конвертирует правильно, но не numpy.datetime64(a.astype("S8"))?Почему функция NumPy не принимает строки NUMPY и только обычные строки Python?Я использую Numpy 1.6.1 с Python 2.7.2 для Windows 7.

1 Ответ

4 голосов
/ 19 марта 2012

Воспроизведение результатов:

>>> a = numpy.array([20090913, 20101020, 20110125])

>>> numpy.datetime64(a.astype("S8").tolist())
array([2009-09-13 00:00:00, 2010-10-20 00:00:00, 2011-01-25 00:00:00], dtype=datetime64[us])

>>> numpy.datetime64(a.astype("S8"))
array([1970-01-01 00:00:20.090913, 1970-01-01 00:00:20.101020,
       1970-01-01 00:00:20.110125], dtype=datetime64[us])

Вот ключ:

>>> a.astype("S8").tolist()
['20090913', '20101020', '20110125']
>>> a.astype("S8")
array(['20090913', '20101020', '20110125'],
      dtype='|S8')

В первом случае строковые аргументы передаются в numpy.datetime64 и анализируются правильно, точнокак вы описали.Во втором случае необходимо выполнить явное принуждение из |S8, как предполагалось.Оказывается, это рассматривается, но в настоящее время явно не поддерживается :

Это не произошло, потому что свойства datetime не существуют в массивах послевы конвертируете их в datetime64, так что это может привести к некоторым неинтуитивным последствиям.Когда Мартин реализовал кватернионный dtype, мы обсудили возможность того, что dtypes могут предоставлять свойства, которые отображаются в объекте массива, и если бы это было реализовано, я думаю, что преобразование и совместимость между python datetime и datetime64 могли бы быть вполне естественными.1015 *

В документации есть больше примеров рабочих принуждений, которые вы, возможно, пожелаете рассмотреть, в том числе из других временных форматов.Если вы чувствуете, что необходимость явного приведения типов ошибочна, я бы порекомендовал сообщить об этом команде numpy и, если возможно, представить собственный патч.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...