matlab - 如何在matlab if语句中更新向量的长度

标签 matlab for-loop

我正在使用 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/

相关文章:

matlab - 沿曲线移动点(3D 动画图)

matlab - 将条形图的刻度标签更改为对数刻度

JavaScript 简化 for 循环

c++ - 正确使用c++中的Matlab "engine.h"

c++ - 从 3d 模型截取屏幕截图

c++ - 如何使用 for-each 循环扫描 int 数组对象?

java - 使用 while 循环弹跳球,我需要将每次弹跳减少 30% 直到 0,然后退出循环以避免无限循环

r - R 中嵌套 For/If 循环的算法效率

java - 我的智囊游戏中的 For 循环

python - Matlab相当于Numpy广播?