3

我有一个向量,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 值,因为它们不准确。我创建了向量 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 循环,但我不知道从哪里开始,也找不到合适的类似问题基于我的想法!

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

4

2 回答 2

2

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

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

将其编写为单行代码始终是一项运动(请参阅 Mohsen 的答案),但在许多情况下,显式的 for 循环要清晰得多。

于 2013-09-20T13:02:29.437 回答
2

一个紧凑的是:

B = A;
B(bsxfun(@lt, rowid.', 1:size(A,2)))=NaN;
于 2013-09-20T13:19:57.927 回答