我正在努力将两个矩阵堆叠在一起。我正在使用pyKalman包,它在更新时会返回一个矩阵元组。一个具有更新的估计(new_pred
1×2矢量)和相应的协方差矩阵(new_cov
a 2×2矩阵)。
更新后,我希望将返回的值堆叠到相应的输出,以便通过这些估计对数据进行递归平滑。
以下是目前的实施方式。
for meas in onlineObservations:
(new_pred, new_cov) = kf.filter_update(states_pred[-1], cov_pred[-1], meas)
states_pred = np.vstack((states_pred, new_pred))
cov_pred = np.stack((cov_pred, new_cov), axis=0)
这对于更新的估计(1x2向量)非常有效,但是当我尝试将new_cov
添加到名为cov_pred
的数组时失败。好的方法:
states_pred.shape = (900,2)
cov_pred.shape = (900, 2, 2)
我尝试过改变"堆栈"的轴。无济于事。这可能是一些基本的东西,但过去一小时我一直在努力,似乎无法找到一个简单的"溶液
提前致谢。
答案 0 :(得分:2)
这应该有效 -
cov_pred = []
for meas in onlineObservations:
(new_pred, new_cov) = kf.filter_update(states_pred[-1], cov_pred[-1], meas)
states_pred = np.vstack((states_pred, new_pred))
cov_pred.append[new_cov]
cov_pred = np.stack(cov_pred, axis=0)
但是,既然您想要更新已在代码中使用的数组,则应使用np.concatenate
for meas in onlineObservations:
(new_pred, new_cov) = kf.filter_update(states_pred[-1], cov_pred[-1], meas)
states_pred = np.vstack((states_pred, new_pred))
cov_pred = np.concatenate((cov_pred, np.reshape(new_cov, (1,2,2))), axis=0)
答案 1 :(得分:0)
我已经能够通过将cov_pred
转换为列表来使其工作,然后使用:
cov_pred.append(new_cov)
然后在for循环后重新将其重新转换回来。但这似乎很乏味 - 至少如果还有更好的方式!
答案 2 :(得分:0)
您可以将代码保存在For循环中(While循环也可以)并使用' Auto-index Enabled'这就是它.... 在Loop的输出端,LabVIEW将根据您的要求创建一个3D数据。