我正在使用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'作爲循環變量的積分:) –