在MATLAB

时间:2017-11-04 16:46:00

标签: arrays matlab loops replace

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

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

我有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

2 个答案:

答案 0 :(得分:2)

摆脱循环的版本看起来像这样:

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 :(得分:1)

这就像下面的

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