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

问题描述

我有一个大小为 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 (将#修改为@)