【问题标题】:Find array elements and replace column in MATLAB在 MATLAB 中查找数组元素并替换列
【发布时间】:2018-04-17 04:58:26
【问题描述】:

我有一个大小为 13472x1537 的矩阵 A。该矩阵包含小于 1 的值。在我的情况下,我寻求满足以下条件的解决方案: 如果某列包含小于 1 的值,请将同一列中的所有其他值替换为 NaN

我能够实现可以将这些值(小于 1)替换为之前的值(或任何值)的代码。但是,我正在寻找一种解决方案,该解决方案将列中的每个值都更改为 NaN,无论以后(或以前)的值是否大于 1。

我有i=1537; t=13472

for i = 1:size(A,2) 
    I = A(1,i);
    for t= 2:size(A,1)
        if A(t,i) <= 1
           A(t,i) = I;
        else
        I = A(t,i);
        end
    end
end

【问题讨论】:

  • 当一列中有多个小于 1 的值时,期望的行为是什么?
  • @DennisKlopfer:好的,我应该指定问题。如果一列中至少有一个小于 1 的值,则该列中的所有值都应返回 NaN。

标签: arrays matlab loops replace


【解决方案1】:

摆脱循环的版本如下所示:

A = randn(5)+2; % Random example
[row,col] = find(A<1);
A(:,col) = NaN;

如果您希望矩阵中的值小于 1,则解决方案可能如下所示:

A = randn(5)+2; % Random example
[row,col,ind] = find(A<1);
b = A(ind)
A(:,col) = NaN;
A(ind) = b;

【讨论】:

  • 这个解决方案的工作原理是它可以识别所有小于 1 的值。但是,如果有随机示例和 5x5 矩阵,它会返回一个 1x5 向量。是否有可能获得一个 5x5 矩阵,该矩阵返回不小于 1 的单元格的实际值?或者您是否建议使用“repmat”函数并以某种方式使用 if 语句:如果 A==0 从原始矩阵返回值?也许您有一个更顺畅的解决方案?
  • A 仍然是一个 5x5 矩阵,包含所有小于 1 的值。我不太明白你的问题。你能澄清你想要作为矩阵而不是向量的输出吗?我不确定在这种情况下你想如何使用repmat?我稍微编辑了代码的第二部分以使用更少的内存空间。
【解决方案2】:

如下所示

for i = 1:size(A,2) 
    if ~isempty(find(A(:,i) <= 1))
        A(:,i)=nan(size(A,1),1);
    end
end

【讨论】:

    猜你喜欢
    • 2017-09-12
    • 2015-09-06
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 2011-02-04
    • 2017-10-01
    • 2011-03-28
    相关资源
    最近更新 更多