Воспроизведение результатов:
>>> 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 и, если возможно, представить собственный патч.