如何有效标准化与先前条目相关的数据

问题描述 投票:0回答:1

我正在尝试编写一个 python 脚本来标准化与前面的条目相关的 -1 到 1 范围内的大量数据(> 10000 个条目)。

我目前正在做的是迭代集合并从迭代索引之前的 10 个索引到迭代索引(包括)对数据数组进行切片。然后,这允许我计算与之前 10 个条目相关的当前迭代条目。这可行,但在我的机器上需要很长时间。

我想知道是否有任何方法可以优化流程。我可以使用外部库,例如 pandas 和 numpy。

我非常清楚 python 数组、pandas 和 numpy 之间的性能差异,但我更感兴趣的是更通用的优化技术(如果存在),可在大多数情况下使用。 我正在寻找数学和通用算法优化,而不是直接的计算性能。

这是我的代码的简化表示:

def standardize_last(data):
    min = data[0]
    max = data[0]
    for i in range(0, len(data)):
        entry = data[i]
        if entry < min:
            min = entry
        elif entry > max:
            max = entry
    if min == max:
        return 0
    else:
        # 1. Shift range minimum to 0
        # 2. Divide value by range to get a standard value from 0 to 1
        # 3. Move to range from -1 to 1
        return (((data[-1] - min) / (max - min)) * 2) - 1

results = []
dataset = [2,2,2,2,2,2,2,2,2,-2,-1,0,1,2,3,2]

# Standardize
for i in range(9, len(dataset)):
    slice = dataset[i - 9:i + 1]
    val = standardize_last(slice)
    results.append(val)

print(results)

输出(结果从第9个数据集索引开始):

[-1.0, -0.5, 0.0, 0.5, 1.0, 1.0, 0.6000000000000001]

python pandas numpy iteration mathematical-optimization
1个回答
0
投票

尝试使用矢量化运算:

from numpy.lib.stride_tricks import sliding_window_view

v = sliding_window_view(dataset, 10)
mn = v.min(1)
mx = v.max(1)

(v[:, -1] - mn)/(mx - mn) * 2 - 1
array([-1. , -0.5,  0. ,  0.5,  1. ,  1. ,  0.6])
© www.soinside.com 2019 - 2024. All rights reserved.