重新划分锯齿状测试数据
Remesh jagged test data
背景
我有 4 组有刷直流电机的数据都是从同一个实验中收集的:
- 扭矩与速度(T 与 w)
- 扭矩与效率(T 与 n)
- 扭矩与输入功率(T 与 Pin)
- 扭矩与输出功率(T 与 Pout)
然而,每个数据集有:
- 第一个和最后一个数据对的 x 值略有不同(T_0 和 T_N 在每个数据集之间不匹配)
- 每个数据点之间的间距不同(所有组的 dT 都不相同)
- 大小不同("T vs w" 的数据对多于 "T vs Pin")
问题
这些差异使我无法在数据集之间进行处理。例如,我无法将单个实验的 T 数组用于我的所有计算,也无法将测量的 Pout 与不同 T 下的计算 Pout (T*w) 进行比较。
对我的数据重新采样以生成大小均匀的 和 均匀间隔集的最佳方法是什么?
尝试的解决方案
For each data set:
find domain shared with all sets (max x_0 and min x_N between all x)
extract indices corresponding to shared domain
#(idx = np.where(np.logical_and(x>=xMin,x<=xMax)))
if set x_0 != shared x_0:
linearly interpolate for new y_0 based on old x & y, shared x_0, and shared y_0
Piecewise linear interpolation (my own custom function) of M data points in the set
但是,这仍然给我不一致的结果,因为每个重新划分网格的数据集的 "timestep" 仍然 与数据集不同。
假设
使用scipy的内置插值库为每个数据集生成线性插值函数并简单地填充新数据table相同的开始和停止索引和时间步长。
UPDATE/solution
写出这个问题让我很快意识到 scipy 的 interp1d 函数对我来说是最好的解决方案,尤其是因为我所有的数据点都是线性的。我按如下方式解决了我的问题:
- 遍历每个数据集以找到共享域(最小值 T_N、最大值 T_0)
- 再次循环(第二个循环必要)并为每个数据集创建interp1d函数
- 使用每个插值计算相同的均匀间隔域
- 将结果保存到文本文件
如您所说,一种替代方法是为每个数据集计算分段线性插值函数。我会在同一个范围内包括二次和三次样条 class。相反,您可以使用曲线拟合为每个数据集拟合合理的函数。然后,您可以选择 max(T-0) 作为所有拟合函数的起点,同样选择 min(T-N) 作为所有拟合函数的终点。
背景
我有 4 组有刷直流电机的数据都是从同一个实验中收集的:
- 扭矩与速度(T 与 w)
- 扭矩与效率(T 与 n)
- 扭矩与输入功率(T 与 Pin)
- 扭矩与输出功率(T 与 Pout)
然而,每个数据集有:
- 第一个和最后一个数据对的 x 值略有不同(T_0 和 T_N 在每个数据集之间不匹配)
- 每个数据点之间的间距不同(所有组的 dT 都不相同)
- 大小不同("T vs w" 的数据对多于 "T vs Pin")
问题
这些差异使我无法在数据集之间进行处理。例如,我无法将单个实验的 T 数组用于我的所有计算,也无法将测量的 Pout 与不同 T 下的计算 Pout (T*w) 进行比较。
对我的数据重新采样以生成大小均匀的 和 均匀间隔集的最佳方法是什么?
尝试的解决方案
For each data set:
find domain shared with all sets (max x_0 and min x_N between all x)
extract indices corresponding to shared domain
#(idx = np.where(np.logical_and(x>=xMin,x<=xMax)))
if set x_0 != shared x_0:
linearly interpolate for new y_0 based on old x & y, shared x_0, and shared y_0
Piecewise linear interpolation (my own custom function) of M data points in the set
但是,这仍然给我不一致的结果,因为每个重新划分网格的数据集的 "timestep" 仍然 与数据集不同。
假设
使用scipy的内置插值库为每个数据集生成线性插值函数并简单地填充新数据table相同的开始和停止索引和时间步长。
UPDATE/solution
写出这个问题让我很快意识到 scipy 的 interp1d 函数对我来说是最好的解决方案,尤其是因为我所有的数据点都是线性的。我按如下方式解决了我的问题:
- 遍历每个数据集以找到共享域(最小值 T_N、最大值 T_0)
- 再次循环(第二个循环必要)并为每个数据集创建interp1d函数
- 使用每个插值计算相同的均匀间隔域
- 将结果保存到文本文件
如您所说,一种替代方法是为每个数据集计算分段线性插值函数。我会在同一个范围内包括二次和三次样条 class。相反,您可以使用曲线拟合为每个数据集拟合合理的函数。然后,您可以选择 max(T-0) 作为所有拟合函数的起点,同样选择 min(T-N) 作为所有拟合函数的终点。