如何從排序串列中獲取一系列日期時間值,它們的時間差至少為 x 秒?序列應始終從串列的第一個值開始,并包括最后一個值,該值與序列中倒數第二個值的差大于 x 秒。
x = 1 秒的示例
Input_Arr = np.array([datetime(1981,1,1,0,0,0,40),
datetime(1981,1,1,0,0,0,80),
datetime(1981,1,1,0,0,1,20),
datetime(1981,1,1,0,0,1,50),
datetime(1981,1,1,0,0,2,00),
datetime(1981,1,1,0,0,2,70),
datetime(1981,1,1,0,0,3,10),
datetime(1981,1,1,0,0,3,40),
datetime(1981,1,1,0,0,4,20),
datetime(1981,1,1,0,0,5,00)])
Output_Arr: np.array([datetime(1981,1,1,0,0,0,40),
datetime(1981,1,1,0,0,1,50),
datetime(1981,1,1,0,0,2,70),
datetime(1981,1,1,0,0,4,20),
我認為以下兩種方法的組合將是解決方案,但我無法正確獲取代碼。 這里 這里
以下作業,但不是很干凈,對于更大的陣列也不是很快。
Output_Arr = list()
time_delta = 1
for id, value in enumerate(Input_Arr):
if id == 0:
Output_Arr.append(value)
else:
if Output_Arr[-1] timedelta(seconds=time_delta) < value:
Output_Arr.append(value)
uj5u.com熱心網友回復:
使用回圈并使用 timedelta 比較時間的最直接方式。
from datetime import datetime, timedelta
from math import ceil
import numpy as np
input_arr = np.array([datetime(1981,1,1,0,0,0,40),
datetime(1981,1,1,0,0,0,80),
datetime(1981,1,1,0,0,1,20),
datetime(1981,1,1,0,0,1,50),
datetime(1981,1,1,0,0,2,00),
datetime(1981,1,1,0,0,2,70),
datetime(1981,1,1,0,0,3,10),
datetime(1981,1,1,0,0,3,40),
datetime(1981,1,1,0,0,4,20),
datetime(1981,1,1,0,0,5,00)])
# Pre allocate the maximal array size possible
x = timedelta(seconds=1) # Define the minimal time delta
nb_max_output = ceil((input_arr[-1] - input_arr[0])/x) 1 # Use ceil because of numerical imprecision
output_arr = np.zeros(nb_max_output, dtype=object) # Pre allocation
# Initialize variables
output_arr[0] = input_arr[0]
next_output = 1
for i in range(1, len(input_arr)):
# Check time difference with the last time in output
if input_arr[i] - output_arr[next_output-1] >= x:
# Add to the output list
output_arr[next_output] = input_arr[i]
next_output = 1
# Truncate output array
output_arr = output_arr[:next_output]
# Show result
print(output_arr)
輸出是:
>> [datetime.datetime(1981, 1, 1, 0, 0, 0, 40)
datetime.datetime(1981, 1, 1, 0, 0, 1, 50)
datetime.datetime(1981, 1, 1, 0, 0, 2, 70)
datetime.datetime(1981, 1, 1, 0, 0, 4, 20)]
訣竅是用來deltatime比較您的日期并預先分配您的陣列,因為動態分配通常很慢。可能有一些方法可以在 python 中撰寫更短的代碼并進行更多優化,但這是我想到的最大的一種。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/526474.html
標籤:Python约会时间
上一篇:兩個日期時間之間的插值
