我有一个向量 n 值,如果它被认为具有环形拓扑,我想将它分成 n 组,每组 3 个相邻值。
我想做的是:
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。
我在以下方面制定了一个非常hack-ish的解决方案:
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
但这很不雅,我觉得应该有更好的方法来做到这一点..
是否有一些运算符允许您对向量索引执行模运算?