将2D阵列添加到3D阵列

时间:2018-03-28 11:09:04

标签: python arrays python-3.x numpy

我正在努力将两个矩阵堆叠在一起。我正在使用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)

我尝试过改变"堆栈"的轴。无济于事。这可能是一些基本的东西,但过去一小时我一直在努力,似乎无法找到一个简单的"溶液

提前致谢。

3 个答案:

答案 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数据。