4

我最近注意到 numpy 包含从 numpy 1.7 开始的 datetime64 数据类型:

http://www.compsci.wm.edu/SciClone/documentation/software/math/NumPy/html1.7/reference/arrays.datetime.html

我想知道将其作为单独类型包含在 numpy 包中而不是使用 Python 提供的内置 datetime.datetime 背后的动机是什么?

我有兴趣更好地理解这一点的一些原因包括:

  1. 我想知道何时适合使用 datetime.datetime 与何时使用 numpy.datetime64
  2. 由于 numpy 不包含类似于 datetime.date 的日期类型,当我需要与 numpy.datetime64 对象交互时,我应该使用 numpy.datetime64 作为日期吗?或者我应该在我的代码中混合 datetime.date 和 numpy.datetime64 吗?
4

2 回答 2

2

我避免混合 datetime64 和 python 的内置 datetime 对象。这样做的原因是您编写的使用 datetime.datetime 的代码将无法使用 numpy.datetime64 标量。例如 datetime.datetime 的任何方法或属性在 numpy.datetime64 对象上都不可用。

为了避免混合,我倾向于在处理标量时使用 python 的 datetime.datetime 或 datetime.date。当我处理 numpy 数组时,我使用 datetime64。这意味着当我从 numpy datetime64 数组中提取或迭代单个值时,我首先将它们转换为 datetime 对象,然后再传播到代码库的其他部分。

您还可以阅读 datetime64 的不同单位,这将允许您在此处使用 datetime64 作为 datetime.date 或 datetime.datetime:

http://docs.scipy.org/doc/numpy-dev/reference/arrays.datetime.html#arrays-dtypes-dateunits

于 2014-03-06T04:41:15.563 回答
2

原因与为什么存在 np.int 和 np.float 相同。这些 numpy 类型按值存储在数组中,而不是像通用 python 对象那样通过装箱引用存储。后者需要更多的内存,分配开销,并且对遍历的缓存友好性要低得多。

于 2014-01-01T16:46:48.640 回答