用NaN替换矩阵的某些元素(MATLAB)

时间:2013-09-20 12:57:46

标签: matlab matrix nan

我有一个矢量,A。

A=[3,4,5,2,2,4;2,3,4,5,3,4;2,4,3,2,3,1;1,2,3,2,3,4]

A中的某些记录必须替换为NaN值,因为它们不准确。 我创建了vector rowid,它记录了必须保留的最后一个值,之后必须将现有值交换为NaN。

rowid=[4,5,4,3]

所以我想要创建的矢量B看起来如下:

B=[3,4,5,2,NaN,NaN;2,3,4,5,3,NaN;2,4,3,2,NaN,NaN;1,2,3,NaN,NaN,NaN]

我对如何做到这一点感到茫然。我试过用

A(:,rowid:end)

开始从向量A中选择数据。我希望能够使用sub2ind或某种idx来执行此操作,可能是if循环,但我不知道从哪里开始并且找不到合适的基于我的想法的类似问题!

我非常感谢任何提示/指示,非常感谢

2 个答案:

答案 0 :(得分:2)

如果您还不是matlab的专家,我现在会坚持使用简单的for循环:

B = A;
for i=1:length(rowid)
    B(i, rowid(i)+1:end) = NaN;
end

将此作为一个单行写一直是一项运动(参见Mohsen的答案),但在许多情况下,明确的for循环更清晰。

答案 1 :(得分:2)

紧凑的是:

B = A;
B(bsxfun(@lt, rowid.', 1:size(A,2)))=NaN;