如何将两个采样向量的所有数值重映射到[-1, 1]区间范围内
向量数值重映射到[-1,1]区间的实现方案
通用映射公式
所有任意范围的数值向量要映射到[-1,1]区间,都可以用变形的Min-Max归一化方法,公式如下:归一化后数值 = 2 * (原始数值 - 向量最小值) / (向量最大值 - 向量最小值) - 1
- 计算逻辑是先把原始数值映射到[0,1]区间,再通过线性变换拉伸到[-1,1]区间
- 遇到向量所有数值完全相同的极端情况,可统一映射为0,避免除以0报错
针对你给出的两个向量的计算
采样向量1(取值范围[-0.8, 0.8])
代入参数到通用公式,可简化得到直接计算式:归一化后数值 = 原始数值 / 0.8
- 原向量样例:
[ -0.8, 0.7 , -0.23, 0.56, 0.456, -0.344, -0.75, 0.8] - 映射后结果:
[-1.0, 0.875, -0.2875, 0.7, 0.57, -0.43, -0.9375, 1.0]
采样向量2(取值范围[0.2, 0.3])
代入参数到通用公式,可简化得到直接计算式:归一化后数值 = 20 * 原始数值 - 5
- 原向量样例:
[ 0.2, 0.23, 0.21, 0.29, 0.26, 0.25, 0.3] - 映射后结果:
[-1.0, -0.4, -0.8, 0.8, 0.2, 0.0, 1.0]
通用代码实现(Python版本)
def remap_to_minus1_1(input_vector): vec_min = min(input_vector) vec_max = max(input_vector) # 处理所有元素相同的极端场景 if vec_max == vec_min: return [0.0 for _ in input_vector] return [2 * (x - vec_min) / (vec_max - vec_min) - 1 for x in input_vector] # 测试样例 if __name__ == "__main__": vector1 = [-0.8, 0.7 , -0.23, 0.56, 0.456, -0.344, -0.75, 0.8] vector2 = [0.2, 0.23, 0.21, 0.29, 0.26, 0.25, 0.3] print(remap_to_minus1_1(vector1)) print(remap_to_minus1_1(vector2))
内容的提问来源于stack exchange,提问作者coderide
相关产品推荐
相关产品推荐

