【问题标题】:Replace certain elements of matrix with NaN (MATLAB)用 NaN 替换矩阵的某些元素(MATLAB)
【发布时间】:2013-09-25 21:06:08
【问题描述】:

我有一个向量,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 循环,但我不知道从哪里开始,也找不到合适的类似的问题可以作为我思考的基础!

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

【问题讨论】:

  • 似乎您在这里有两个单独的问题,最好将它们分成不同的帖子..
  • 确实,我会删除关于 10% 的段落,如果您遇到困难,请在单独的问题中提出。

标签: matlab matrix nan


【解决方案1】:

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

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

将它写成单行代码总是一种运动(参见 Mohsen 的回答),但在许多情况下,显式的 for 循环会更清晰。

【讨论】:

    【解决方案2】:

    一个紧凑的是:

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

    【讨论】:

    • +1 但肯定应该是B(bsxfun(@lt, rowid.', 1:size(A,2)))=NaN;
    猜你喜欢
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    • 2017-02-27
    • 2015-04-17
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多