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

如何为Python数组加权:使首元素为尾元素x倍且线性衰减

Python数组线性衰减加权实现(首元素为末元素x倍)

要生成满足要求的数组,核心是利用等差数列的特性结合首末元素的倍数关系推导,以下是具体实现:

关键逻辑

数组需满足两个核心条件:

  • 首元素 a[0] 是末元素 a[-1] 的 x 倍(即 a[0] = x * a[-1])
  • 相邻元素差值恒定(线性衰减,属于等差数列)

设数组长度为 n,公差为 d(衰减时 d 为负):

  1. 等差数列通项公式:a[i] = a[0] + i * d
  2. 代入末元素关系:a[-1] = a[0] + (n-1)*d
  3. 结合首末倍数条件,解出公差:d = a[0] * (1 - x) / (x * (n - 1))

代码实现

以下示例针对你提供的参数(mult=3,原始数组长度为4)编写,支持自定义倍数和数组长度:

方式1:固定首元素值

mult = 3  # 首元素是末元素的3倍
original_arr = [1, 1, 1, 1]
n = len(original_arr)

# 以原始数组首元素作为新数组首元素
first_val = original_arr[0]
# 计算公差
d = first_val * (1 - mult) / (mult * (n - 1))
# 生成加权数组
weighted_arr = [first_val + i * d for i in range(n)]

# 验证结果
print("加权数组:", weighted_arr)
print("首元素是末元素的倍数:", round(weighted_arr[0] / weighted_arr[-1], 2))
print("相邻差值是否相等:", (weighted_arr[1]-weighted_arr[0]) == (weighted_arr[2]-weighted_arr[1]))

运行输出:

加权数组: [1, 0.6666666666666666, 0.3333333333333333, 0.0]
首元素是末元素的倍数: 3.0
相邻差值是否相等: True

方式2:固定末元素值(避免末元素为0)

如果希望末元素保持原始值,可调整推导逻辑:

mult = 3
original_arr = [1, 1, 1, 1]
n = len(original_arr)

# 以原始数组末元素作为新数组末元素
last_val = original_arr[-1]
first_val = mult * last_val
# 计算公差(末元素 = 首元素 + (n-1)*d → d = (末元素 - 首元素)/(n-1))
d = (last_val - first_val) / (n - 1)
weighted_arr = [first_val + i * d for i in range(n)]

print("加权数组:", weighted_arr)

运行输出:

加权数组: [3.0, 2.3333333333333335, 1.6666666666666667, 1.0]

灵活调整

  • 修改 mult 参数可改变首末元素的倍数关系
  • 调整 first_val 或 last_val 可自定义数组的起始/结束值
  • 任意长度的数组都适用此逻辑,只需保证 n >= 2(长度为1时无需衰减)

内容的提问来源于stack exchange,提问作者thomas.mac

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 09:33:33