如何使用Python的Numpy获取Newdate数组中各datetime元素在Setups数组中的索引
获取Newdate数组元素在Setups数组中的索引值解决方案
嘿,我来帮你搞定这个需求!你要做的就是把Newdate数组里的每个日期,对应到Setups数组里的索引位置对吧?这里有两种实用的实现方式,适配numpy的datetime数组场景:
方法1:利用numpy内置的searchsorted(高效排序场景)
如果你的Setups数组本身是按时间升序排列的(就像示例里的那样),用np.searchsorted是最高效的方式,它能快速定位每个元素的插入位置,刚好就是对应的索引:
import numpy as np Setups= np.array(['2017-09-15T07:11:00.000000000','2017-09-15T11:25:00.000000000', '2017-09-15T12:11:00.000000000', '2017-12-22T03:14:00.000000000', '2017-12-22T03:26:00.000000000', '2017-12-22T03:31:00.000000000', '2017-12-22T03:56:00.000000000'],dtype="datetime64[ns]") Newdate = np.array(['2017-09-15T07:11:00.000000000', '2017-12-22T03:31:00.000000000','2017-09-15T11:25:00.000000000', '2017-12-22T03:56:00.000000000'],dtype="datetime64[ns]") # 计算索引 indices = np.searchsorted(Setups, Newdate) print(indices) # 输出: [0 5 1 6]
方法2:字典映射(通用场景)
如果Setups数组不是排序的,或者你想要更直观的逻辑,那就用字典来建立“日期-索引”的映射关系,这种方法不受排序限制,代码也很好理解:
import numpy as np Setups= np.array(['2017-09-15T07:11:00.000000000','2017-09-15T11:25:00.000000000', '2017-09-15T12:11:00.000000000', '2017-12-22T03:14:00.000000000', '2017-12-22T03:26:00.000000000', '2017-12-22T03:31:00.000000000', '2017-12-22T03:56:00.000000000'],dtype="datetime64[ns]") Newdate = np.array(['2017-09-15T07:11:00.000000000', '2017-12-22T03:31:00.000000000','2017-09-15T11:25:00.000000000', '2017-12-22T03:56:00.000000000'],dtype="datetime64[ns]") # 创建日期到索引的映射字典 date_to_index = {date: idx for idx, date in enumerate(Setups)} # 遍历Newdate获取对应索引 indices = np.array([date_to_index[date] for date in Newdate]) print(indices) # 输出: [0 5 1 6]
额外提示
如果Newdate里可能存在Setups中没有的日期,字典方法会抛出KeyError,这时候可以用date_to_index.get(date, -1)来返回一个默认值(比如-1),表示该日期找不到对应的索引:
indices = np.array([date_to_index.get(date, -1) for date in Newdate])
内容的提问来源于stack exchange,提问作者georgehere
相关产品推荐
相关产品推荐

