微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

您能否有效地将工作日偏移量添加到日期时间数组并返回外部产品?

如何解决您能否有效地将工作日偏移量添加到日期时间数组并返回外部产品?

我有一个大小为 nx 1 的日期时间对象的数组 A 和大小为 mx 1 的整数数组 B。对于 A 中的每个日期,我想将其全部递增数组 B 中指定的工作日增量。

示例:

import numpy as np
from datetime import date
A = np.array([date(2021,6,1),date(2021,4)])
B = [0,1,2]

在这种情况下,所需的结果类似于:

2021-06-01 2021-06-02 2021-06-03
2021-06-04 2021-06-07 2021-06-08

也就是说,一个大小为 n x m 的数组。对于第 i 行,A[i]

中每个 x 的值为 B + x 个工作日

解决方案的关键要求是高效(矢量化?)。我将使用参数 m = 60,000 & n = 60 执行此操作 100 次。所以至少 O(10^8) 日期时间操作。

我的尝试

我找到了 numpy 的 busday_offset 方法https://numpy.org/doc/stable/reference/generated/numpy.busday_offset.html

看起来你可以为它提供数组,它会做一些矢量化的魔法。

我发现这有效:

np.busday_offset(datetime.date(2021,B)

但这不会:

np.busday_offset(A,B)

我收到错误“迭代器操作数或请求的数据类型包含引用,但未启用 REFS_OK 标志”

在这里做错了什么?有没有更好的方法解决这个问题?

-- 编辑 --

解决方

REFS_OK 标志错误是因为我已将 A 定义为包含对象类型的数组。如果正确定义 numpy 数组类型,并为工作日偏移数组设置正确的形状,则它可以工作:

A = np.array([date(2021,4)],dtype='datetime64')
B = np.array([[0],[1],[2]])
np.busday_offset(A,B)

按照问题规范的要求生成一个 3x2 矩阵。解决方案似乎也很快(确实,足够快,以至于它不再是我代码中的瓶颈)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。