我正在使用 MATLAB 编写一个函数,该函数可以找到向量 v 中等于标量 a
的所有元素,并将它们中的每一个更改为 [b c]
,最后返回新的向量w。如果 v = [1 2 5]、a = 2、b = 4、c = 3,
则结果为 w = [1 4 3 5]
。
下面是我的代码
function w = change(v, a , b ,c )
for ii = 1:length(v)
if v(ii) == a
v_1 = v(1:ii-1);
v_2 = v(ii+1:length(v));
v_3 = [b c];
v = [v_1 v_3 v_2];
end
end
w = v;
end
但是,问题是:for
语句只会在第一次循环之前读取v
的长度,这样,如果向量的大小增加,则 if 语句中的 length(v)
将不会更新,因此 ii
无法覆盖所有元素索引。例如,如果我的输入是 ([1 2 2 2 3 2 4 5 6 2], 2, 4, 4)
,那么使用我的代码, for
将停止在 ii = 10
处,即旧 v
的长度,并给出错误的结果 [1 4 4 4 4 4 4 3 4 4 4 5 6 2 ]
,这不会更改最后一个元素(因为 ii 不涵盖 15)。
我的问题是:如何更新 if
语句中的 length(v)
?或者还有其他更好的方法来完成这个任务吗?
非常感谢。
最佳答案
我认为如果使用元胞数组,这会更容易。
function w = change(v, a , b ,c )
cellV = num2cell(v);
cellW = cellfun(@(x)(subFunction(x,a,b,c)),cellV,'uni',0);
w = [cellW{:}];
end
function out = subFunction(val,a,b,c)
if (val == a)
out = [b c];
else
out = x;
end
end
关于matlab - 如何在matlab if语句中更新向量的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35690128/