如何在python中高效地在时间序列之间映射数据

如何在python中高效地在时间序列之间映射数据,python,numpy,testing,time-series,resampling,Python,Numpy,Testing,Time Series,Resampling,我试图创建一个有效的函数来重新采样时间序列数据 假设:两组时间序列数据具有相同的开始和结束时间。(我在单独的步骤中执行此操作。) 重采样功能(效率低下) 将numpy导入为np def重采样(所需的时间序列、数据序列): 下采样索引=np.linspace(0,len(数据序列)-1,len(所需时间序列)).round().astype(int) 下采样_数组=[下采样_索引中ind的数据_序列[ind] 返回下采样_阵列 速度测试 import timeit def测试速度():重新采样(

我试图创建一个有效的函数来重新采样时间序列数据

假设:两组时间序列数据具有相同的开始和结束时间。(我在单独的步骤中执行此操作。)

重采样功能(效率低下)
将numpy导入为np
def重采样(所需的时间序列、数据序列):
下采样索引=np.linspace(0,len(数据序列)-1,len(所需时间序列)).round().astype(int)
下采样_数组=[下采样_索引中ind的数据_序列[ind]
返回下采样_阵列
速度测试
import timeit
def测试速度():重新采样([1,2,3],.5,1,1.5,2,2.5,3,3.5,4,4.5,5,5.5,6])
打印(timeit.timeit(测试速度,数字=100000))
# 1.5003695999998854 
有兴趣听取任何建议。

downsampled_array = [data_sequence[ind] for ind in downsampling_indices]

为我的测试数据提供了7倍的加速

用于测量加速比的代码:

import timeit

f1 = """
def resample(output_len, data_sequence):
    downsampling_indices = np.linspace(0, len(data_sequence)-1, output_len).round().astype(int)
    downsampled_array = [data_sequence[ind] for ind in downsampling_indices]
    return downsampled_array

resample(output_len, data_sequence)
"""

f2 = """
def resample_fast(output_len, data_sequence):
    downsampling_indices = np.linspace(0, len(data_sequence)-1, output_len).round().astype(int)
    downsampled_array = data_sequence[downsampling_indices]
    return downsampled_array

resample_fast(output_len, data_sequence)
"""


setup="""
import numpy as np
data_sequence = np.random.randn(10000)
output_len = 752
"""

print(timeit.timeit(f1, setup, number=1000))
print(timeit.timeit(f2, setup, number=1000))

# prints:
# 0.30194038699846715
# 0.041797632933594286
替换

downsampled_array = [data_sequence[ind] for ind in downsampling_indices]

为我的测试数据提供了7倍的加速

用于测量加速比的代码:

import timeit

f1 = """
def resample(output_len, data_sequence):
    downsampling_indices = np.linspace(0, len(data_sequence)-1, output_len).round().astype(int)
    downsampled_array = [data_sequence[ind] for ind in downsampling_indices]
    return downsampled_array

resample(output_len, data_sequence)
"""

f2 = """
def resample_fast(output_len, data_sequence):
    downsampling_indices = np.linspace(0, len(data_sequence)-1, output_len).round().astype(int)
    downsampled_array = data_sequence[downsampling_indices]
    return downsampled_array

resample_fast(output_len, data_sequence)
"""


setup="""
import numpy as np
data_sequence = np.random.randn(10000)
output_len = 752
"""

print(timeit.timeit(f1, setup, number=1000))
print(timeit.timeit(f2, setup, number=1000))

# prints:
# 0.30194038699846715
# 0.041797632933594286

请在您的问题中包含a。@Jfacconi您对我如何获得比此更多的最小值和可复制性有什么建议吗?我认为这可能会在上做得更好。谢谢@gmds,我将在代码审查中尝试并很快删除它。请在您的问题中包含a。@Jfacconi您对我如何获得更最小值和可复制性有什么建议吗比这更容易复制?我认为这可能在上做得更好。谢谢@gmds,我将在代码审查中尝试它,并很快在这里删除。