自动插入nans而不覆盖

automatically insert nans without overwriting

我有一个代码可以告诉我哪些位置缺少数据。我需要将 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;