如何用通用方法在NumPy中判断timedelta数组元素是否为负?
通用判断数组元素是否为负的方法
针对任意数据类型的NumPy数组(包括timedelta64类型),可以通过生成与数组同 dtype 的零值来进行比较,彻底避免类型转换错误:
import numpy as np # 示例timedelta64类型数组 d = np.diff(np.array([ '2022-10-13 10:00:00', '2022-10-13 10:30:00', '2022-10-13 11:00:00', '2022-10-14 10:00:00', '2022-10-13 23:00:00', '2022-10-14 00:00:00' ], dtype='datetime64[ns]')) # 通用方案:生成与数组同类型的零值 zero = np.array(0, dtype=d.dtype) mask = d < zero print(mask) # 输出:[False False False True False]
也可以用更简洁的方式生成零值:
zero = np.zeros_like(d)[0] mask = d < zero
原方法报错原因说明
- 直接使用
d < 0:NumPy会尝试将0转换为不带单位的timedelta64基础类型(<m8),但带单位的<m8[ns]与<m8不属于同一类型族,触发类型转换错误。 - 使用
d.dtype(0):d.dtype是dtype对象而非构造函数,无法直接调用,因此抛出TypeError。
内容的提问来源于stack exchange,提问作者Mad Physicist
相关产品推荐
相关产品推荐

