ベクトル n 値があり、リング トポロジがあると見なされる場合は、3 つの隣接する値のグループ n グループに分割したいと考えています。
私がやろうとしていることはこれです:
vector = [some values];
groups = {};
for i = 1:size(vector)(2)
groups{i} = [vector(mod(i-1, size(vector)(2));
vector(i);
vector(mod(i+1, size(vector)(2))];
endfor
したがって、n = 10 で i = 1 の場合、グループは [vector(10); ベクトル (1); ベクトル(2)]
ほとんどのプログラミング言語では、mod 演算子を使用するだけでかなり簡単ですが、matlab を使用してこれを行う方法を理解するのに苦労しています。これは、ベクトルの初期インデックスとして 0 を使用しないため、i = 1 の場合、mod (i-1) = 0 これは不正なインデックス値です。また、i = n は mod(n, n) = 0 として問題になります。
私はかなりハックっぽい解決策を考え出しました:
vector = [some values];
groups = {};
for i = 1:size(vector)(2)
if i == 1
groups{i} = [vector(size(vector)(2));
vector(1);
vector(2)];
elseif i == size(vector)(2)
groups{i} = [vector(size(vector)(2)-1);
vector(size(vector)(2);
vector(1)];
else
groups{i} = [vector(i-1);
vector(i);
vector(i+1)];
endif
endfor
しかし、それはかなりエレガントではなく、それを行うためのより良い方法があるべきだと感じています..
ベクトルインデックスに対してモジュラー演算を実行できる演算子はありますか?