如何使用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
相关产品推荐
相关产品推荐

