自动插入 NAN 而不覆盖



我有一个代码,告诉我哪些位置缺少数据。我需要把NaN放在那里,使MagMatrix1更长。在下面的代码中,缺少 4 个数据,因此需要向矩阵添加 4 个 Nan 列。

vind=[5, 7, 10, 13];
MagMatrix=[ 99 98 97 94 95 96 93 92 91 96 95 94 98 98 ]
MagMatrixH1=[MagMatrix1(:,1:vind(1)-1),nanny,MagMatrix1(:,vind(1):vind(2)-2),nanny,MagMatrix1(:,vind(2)-1:vind(3)-3),nanny,MagMatrix1(:,vind(3)-2:vind(4)-4),nanny,MagMatrix1(:,vind(4)-3:end)];

这是基于这里解释的原理: https://nl.mathworks.com/matlabcentral/answers/1085-inserting-a-column-in-a-matrix-without-deleting-any-column 作为输出给予

MagMatrixH1=[ 99 98 97 94 NaN 95 NaN 96 93 NaN 92 91 NaN 96 95 94 98 98 ]

使 NaN 位于位置 5、7、10、13

这有效,但是如果vind长度不同并且我需要添加例如 10 个 NaN 行,我该怎么办?如何自动执行此操作,而无需每次都手动重写 MagMatrixH1 的代码?基本上,我正在尝试做的是将 NaN 添加到矩阵中,而不会覆盖其中已有的内容。

一种选择是制作所需大小的NaN值矩阵,然后将非NaN值分配给它。您可以使用setdiff来获取非NaN值的索引:

N = numel(MagMatrix)+numel(vind);
MagMatrixH1 = nan([1 N]);
MagMatrixH1(setdiff(1:N, vind)) = MagMatrix;

最新更新