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

如何使用NumPy平滑多维数组中x、y、z列的加速度数据?

加速度计多轴数据平滑与合并解决方案

方法1:逐列处理后合并

分别对x、y、z轴数据完成平滑,再将各轴结果按列合并为新数组。注意np.hstack要求输入为NumPy数组序列,若之前报错,大概率是传入了非数组类型(比如字符串),确保每个平滑后的结果都是数组即可。

代码示例:

import numpy as np
from scipy.interpolate import make_interp_spline

# 原始数据
idx = np.array([1,2,3,4], dtype=int)
accel = np.array([
    [-0.7437,0.1118,-0.5367],
    [-0.5471,0.0062,-0.6338],
    [-0.7437,0.1216,-0.5255],
    [-0.4437,0.3216,-0.3255],
], dtype=float)

# 生成高密度索引点
idxnew = np.linspace(idx.min(), idx.max(), 200) 

# 存储各轴平滑数据
smooth_cols = []
# 循环处理每一列
for col_idx in range(accel.shape[1]):
    spl = make_interp_spline(idx, accel[:, col_idx], k=3)
    smooth_col = spl(idxnew)
    smooth_cols.append(smooth_col.reshape(-1, 1))  # 转为列向量方便合并

# 合并所有列
accel_smooth = np.hstack(smooth_cols)

方法2:直接处理多维数组(更高效)

make_interp_spline支持直接输入二维数组(每列对应一个轴的 data),无需循环,一步完成所有轴的平滑:

代码示例:

import numpy as np
from scipy.interpolate import make_interp_spline

# 原始数据
idx = np.array([1,2,3,4], dtype=int)
accel = np.array([
    [-0.7437,0.1118,-0.5367],
    [-0.5471,0.0062,-0.6338],
    [-0.7437,0.1216,-0.5255],
    [-0.4437,0.3216,-0.3255],
], dtype=float)

# 生成高密度索引点
idxnew = np.linspace(idx.min(), idx.max(), 200) 

# 直接对二维数组做插值平滑
spl = make_interp_spline(idx, accel, k=3)
accel_smooth = spl(idxnew)

报错原因分析

你遇到的*TypeError: expected bytes-like object, not str*,通常是调用np.hstack时传入了字符串(比如误传列名)而非NumPy数组。只要确保传入hstack的所有元素都是数组类型,就能避免这个错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:05:24