ループ内の要素を積極的に削除していて、後でその要素にアクセスしようとしている可能性があります。代わりに、NaN
の値でいっぱいになったj
をして、最後にNaN
の値を削除する必要があります。
j = nan(size(vg));
% Go ahead and keep the first value
j(1) = vg(1);
% Just start at 2 and look backwards rather than using an if statement
% every time through the loop
for m = 2:numel(vg)
% Only change the value in j to a number if it's new
if vg(m - 1) ~= vg(m)
j(m) = vg(m);
end
end
% Remove all of the NaN values (the duplicates)
j = j(~isnan(j));
良好ベクトル化手法は、異なる数の連続する要素間の差を計算し、ある場所を識別するためにdiff
を使用(diff
結果~= 0
である)と論理としてdiff(values) ~= 0
の出力を用いて、それらの要素のみを維持するであろうインデックスはvalues
になります。
values = [1 1 2 3 4 4 4 5 5 1 2 2];
result = values([true, diff(values) ~= 0]);
% 1 2 3 4 5 1 2
我々は常に最初の要素を含めることになるでしょうので、diff(values) ~= 0
の出力の先頭にtrue
を付加する必要があります注意してください。