我正在使用MATLAB编写一个函数,它可以找到矢量v中的所有元素等于标量a
,并将它们中的每一个都更改为[b c]
,最后返回新的向量w。如果v = [1 2 5], a = 2, b = 4, c = 3,
那么结果是w = [1 4 3 5]
。如何更新matlab中的矢量的长度如果语句
下面是我的代码
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
的长度,这样,如果载体的大小增加,那么length(v)
中if语句不会被更新,因此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)
?或者还有其他更好的方法来完成这项任务吗?
非常感谢。
您可以将数字数组转换为单元格数组,并使用'cellfun'来更改元素。我相信代码将会更加清洁。 –
不使用'i'作为循环变量的积分:) –