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

如何通过线性映射使两个不等长数组等长?求Python实现方案

线性重采样实现数组长度统一

你需要的是线性重采样操作,Python里有现成工具可以快速实现,也能手动写逻辑,以下是具体方案:

方法1:用NumPy的np.interp(轻量无需额外安装)

NumPy的线性插值函数np.interp可直接实现时间索引的线性映射,核心是把原始数组的索引映射到目标长度的索引区间,再计算对应插值。

代码示例

import numpy as np

x = [5, 8, 7, 9]
y = [7, 5, 6, 8, 6]

def linear_resample(arr, target_len):
    # 生成原始数组的索引(从0到len(arr)-1)
    original_idx = np.linspace(0, len(arr)-1, len(arr))
    # 生成目标长度的索引(覆盖原始索引的区间)
    target_idx = np.linspace(0, len(arr)-1, target_len)
    # 线性插值得到重采样后的数组
    return np.interp(target_idx, original_idx, arr)

# 把x扩展到y的长度(5)
x_resampled = linear_resample(x, len(y))
# 把y缩短到x的长度(4)
y_resampled = linear_resample(y, len(x))

print("扩展后的x:", x_resampled)
print("缩短后的y:", y_resampled)

输出结果:

扩展后的x: [5.  7.4 7.2 8.2 9. ]
缩短后的y: [7.  5.4 7.  6. ]

方法2:用SciPy的interp1d(更灵活支持多种插值方式)

如果需要更丰富的插值选项(比如三次插值),可以用SciPy的interp1d,线性插值是默认选项之一。

代码示例

from scipy.interpolate import interp1d
import numpy as np

x = [5, 8, 7, 9]
y = [7, 5, 6, 8, 6]

# 把x扩展到长度5
f_x = interp1d(np.linspace(0, 1, len(x)), x, kind='linear')
x_resampled = f_x(np.linspace(0, 1, len(y)))

# 把y缩短到长度4
f_y = interp1d(np.linspace(0, 1, len(y)), y, kind='linear')
y_resampled = f_y(np.linspace(0, 1, len(x)))

print("扩展后的x:", x_resampled)
print("缩短后的y:", y_resampled)

输出和NumPy方法一致。

核心逻辑说明

不管用哪种方法,本质都是:

  1. 把原始数组的索引映射到一个连续区间(比如0到1,或者0到原始长度-1)
  2. 在目标长度对应的新索引位置上,用线性插值计算对应值——扩展时补中间插值,缩短时合并相邻点的线性均值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 14:35:14