You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将数字数组从原有范围映射到最小值为100、最大值为0的新范围

数组反向线性插值转换方案

核心原理

你需要的是保持相对距离不变的反向线性缩放,即原值越小映射后的值越大,原值越大映射后的值越小,推导逻辑如下:

  1. 首先确定两个区间的边界对应关系:
    • 原数组最小值 min_val = 2 → 映射目标值 100
    • 原数组最大值 max_val = 9 → 映射目标值 0
  2. 计算原区间总跨度:max_val - min_val = 7
  3. 每单位原值对应的新值变化量:100 / 7 ≈ 14.29,即原值每升高1,映射后值下降14.29
  4. 最终通用映射公式:

映射后值 = 100 - (原值 - 2) * (100 / 7)

按这个公式计算你举的原值3的结果为 100 - 1*100/7 ≈ 85.71,你提到的95是近似体感,严格按相对距离不变的规则就是以上计算结果。

代码实现

Python 实现

基于Numpy(批量处理效率更高)

import numpy as np

# 输入数组
original_arr = np.array([2, 5, 7, 9, 3])
min_val = original_arr.min()
max_val = original_arr.max()
# 执行转换
transformed_arr = 100 - (original_arr - min_val) * (100 / (max_val - min_val))
# 输出保留两位小数的结果:[100.   57.14  28.57   0.   85.71]
print(transformed_arr.round(2))

纯Python原生实现

original_arr = [2, 5, 7, 9, 3]
min_val = min(original_arr)
max_val = max(original_arr)
scale = 100 / (max_val - min_val)
transformed_arr = [100 - (x - min_val) * scale for x in original_arr]
# 输出结果:[100.0, 57.14285714285714, 28.57142857142857, 0.0, 85.7142857428572]
print(transformed_arr)

JavaScript 实现

const originalArr = [2, 5, 7, 9, 3]
const minVal = Math.min(...originalArr)
const maxVal = Math.max(...originalArr)
const scale = 100 / (maxVal - minVal)
const transformedArr = originalArr.map(x => 100 - (x - minVal) * scale)
console.log(transformedArr)

补充说明

如果后续有新的元素加入数组,只要取值在2到9之间,都可以直接套用上述公式计算;如果新元素超出这个范围,需要重新计算min和max值再调整公式参数。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 05:36:08