如何在NumPy中用datetime64数据类型的固定值填充数组?

wb1gzix0  于 2023-08-05  发布在  其他
关注(0)|答案(2)|浏览(70)

我想用一个固定的datetime64值填充一个numpy数组。输出应类似于以下内容:

array(['2012-09-01', '2012-09-01', '2012-09-01', '2012-09-01',
       '2012-09-01'], dtype='datetime64[D]')

字符串
其中数组的形状和日期值是可变的。
目前我是这样做的:

shape = (5, )
date = "2012-09"

date_array = np.ones(shape=shape) * np.timedelta64(0, 'D') + np.datetime64(date)


我想知道是否有一种更短,更易读的方法来获得相同的输出?

wnavrhmk

wnavrhmk1#

使用numpy.full

out = np.full(shape, np.datetime64(date))

# or
out = np.full(shape, date, dtype='datetime64[D]')

字符串
numpy.tile

out = np.tile(np.array(date, dtype='datetime64[D]'), shape)


或者numpy.repeatreshape

out = np.repeat(np.array(date, dtype='datetime64[D]'),
                np.product(shape)).reshape(shape)

  • 注:对于一维np.repeat(np.array(date, dtype='datetime64[D]'), 5)就足够了。*

输出量:

array(['2012-09-01', '2012-09-01', '2012-09-01', '2012-09-01',
       '2012-09-01'], dtype='datetime64[D]')

fcg9iug3

fcg9iug32#

你也可以使用numpy.broadcast_to(如果shape很大,速度会明显更快):

np.broadcast_to(np.datetime64(date, "D"), shape)

字符串
输出量:

array(['2012-09-01', '2012-09-01', '2012-09-01', '2012-09-01',
       '2012-09-01'], dtype='datetime64[D]')


时间安排:

shape = 500, 500

%timeit np.full(shape, np.datetime64(date))
%timeit np.full(shape, date, dtype='datetime64[D]')
%timeit np.tile(np.array(date, dtype='datetime64[D]'), shape)
%timeit np.repeat(np.array(date, dtype='datetime64[D]'), np.product(shape)).reshape(shape)
%timeit np.broadcast_to(np.datetime64(date, "D"), shape)


输出量:

35 µs ± 154 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)
36.4 µs ± 95.6 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)
1.08 ms ± 294 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)
807 µs ± 4.9 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)
4.21 µs ± 6.31 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)

相关问题