对于if和elseif语句的循环

时间:2018-02-19 15:08:32

标签: matlab loops for-loop if-statement

我有一个简单的问题,我试图替换1x60000数组中的值。

这是我的代码,其中Z是1x60000数组:

for i = 1:length(Z)
    if Z(i) == 140
       Z(i) = 1;
    elseif Z(i) == 83
        Z(i) = 2;
    elseif Z(i) == 52
        Z(i) = 3;
    elseif Z(i) == 36
        Z(i) = 4;
    elseif Z(i) == 28
        Z(i) = 5;
    elseif Z(i) == 23
        Z(i) = 6;
    elseif Z(i) == 125
        Z(i) = -1;
    else
       Z = Z(i);
    end
end

数组中的最大值是140.但是,当我运行代码时,我收到此错误:

  

指数超出矩阵维度。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:5)

您的问题是Z = Z(i)行,您要为数组分配单个值,然后尝试索引下一个循环的单个值。如果您想保持Z(i)不变,请不要使用else条件。

使用一些逻辑索引和ismember,整个代码可以更短(并且更少循环):

% Row 1 values to be replaced in Z by row 2 values
replacements = [140, 83, 52, 36, 28, 23, 125; 
                  1,  2,  3,  4,  5,  6,  -1];
% Get the indices where Z is one of the values to be changed
[~, idx] = ismember(Z, replacements(1,:));
% Use indexing to replace all the values at once
Z(idx~=0) = replacements(2, idx(idx~=0));

答案 1 :(得分:1)

肯定会产生错误的行

Z = Z(i);

因为左边部分没有任何索引。