gpt4 book ai didi

python - 如何向量化 numpy 日期时间数组上的 bool 运算,其中 bool 运算比较日期时间对象属性?

转载 作者:行者123 更新时间:2023-11-30 22:58:32 24 4
gpt4 key购买 nike

在对日期时间对象数组执行 bool 运算(要比较日期时间对象的属性)时,是否可以使用 numpy 的矢量化功能。

我天真的第一次尝试是:

import datetime as dtm
import numpy as np
dt = np.array([dtm.datetime(2014,1,4,12,2,1), dtm.datetime(2014,1,4,12,2,1), dtm.datetime(2014,1,6,12,2,1), dtm.datetime(2014,1,5,12,2,1), dtm.datetime(2014,1,4,12,2,1), dtm.datetime(2013,1,4,13,3,1), dtm.datetime(2013,1,5,22,2,1)])

bool = (dt.year == 2014)

这给了我错误:

AttributeError: 'numpy.ndarray' object has no attribute 'year'

回想起来,这是显而易见的。

我不认为我的第二次天真的尝试是可矢量化的,但认为它可以完成工作:

bool = np.array([dts.year == 2014 for dts in dt])

但是,我收到错误:

SyntaxError: invalid syntax

我不明白我在这个声明中做错了什么。

我更喜欢可矢量化的解决方案,并且我可以使用 for 循环来完成此操作,但我认为我至少应该能够在类似于我的第二次尝试的一行中完成此操作。

是否可以向量化该语句?如果没有,我在第二次尝试中做错了什么?谢谢。

最佳答案

或者,正如您所说,矢量化

import datetime as dtm
import numpy as np
dt = np.array([dtm.datetime(2014,1,4,12,2,1), dtm.datetime(2014,1,4,12,2,1), dtm.datetime(2014,1,6,12,2,1), dtm.datetime(2014,1,5,12,2,1), dtm.datetime(2014,1,4,12,2,1), dtm.datetime(2013,1,4,13,3,1), dtm.datetime(2013,1,5,22,2,1)])

is_2014 = np.vectorize(lambda d: d.year == 2014)

bool_ = is_2014(dt)

请注意,np.vectorize 不一定能提供比纯 Python 循环更好的性能,并且主要用作语法糖。

关于python - 如何向量化 numpy 日期时间数组上的 bool 运算,其中 bool 运算比较日期时间对象属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36139572/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com