【发布时间】:2014-03-26 04:07:29
【问题描述】:
说,我有一个datetime:
given_time = datetime(2013, 10, 8, 0, 0, 33, 945109,
tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=60,
name=None))
我想把它转换成np.datetime64:
np.datetime64(given_time)
> numpy.datetime64('2013-10-08T00:00:33.945109+0100')
效果很好。但是,如果我有一个 given_time 数组:
given_times = np.array([given_time]*3) # dtype is object
given_times.astype('datetime64') 和 given_times = np.array([given_time] * 3, dtype=np.datetime64) 都会触发 TypeError: Cannot cast datetime.datetime object from metadata [us] to [D] according to the rule 'same_kind'
所以,我必须指定单位:
given_times.astype('datetime64[us]')
# or
given_times = np.array([given_time]*3, dtype='datetime64[us]')
我的问题是,为什么我必须在这里指定单位? np.datatime64 构造函数中不需要单位。
【问题讨论】:
-
因为 numpy 数组是变量的同质集合。
array.array也是如此。 -
@GamesBrainiac 我在问为什么 numpy 在这种情况下不能推断出单位,就像它在这里的工作方式一样:
np.array(['2007-07-13', '2006-01-13', '2010-08-13'], dtype='datetime64') -
好问题。
np.array(np.datetime64(d) for d in [given_time] * 3)会发生什么? -
@uʍopǝpısdn
np.array(list(np.datetime64(d) for d in [given_time] * 3))工作