我有一个简单的问题,我试图替换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.但是,当我运行代码时,我收到此错误:
指数超出矩阵维度。
任何帮助都将不胜感激。
答案 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);
因为左边部分没有任何索引。