有序/圆形烫发的八度函数

时间:2015-11-20 14:23:05

标签: octave

所以在八度音阶中我可以做到这一点

octave:3> perms([1 2 3])
ans =

   1   2   3
   2   1   3
   1   3   2
   2   3   1
   3   1   2
   3   2   1

但如果我想要perms之类的内容但保持输入向量的顺序(例如[1 2 3]),则如下所示

1 2 3
3 1 2
2 3 1

是否有内置函数?

2 个答案:

答案 0 :(得分:3)

函数circshift一次只能处理一个班次,迫使你循环遍历它。矢量化的替代方案是:

octave> x = [4 5 6];
octave> n = numel (x);
octave> idx = mod ((0:(n-1)) .+ ((0:(n-1))'), n) +1;
octave> x(idx)
ans =

   4   5   6
   5   6   4
   6   4   5

答案 1 :(得分:1)

是的,请使用circshift

x=[1 2 3];
res=zeros(length(x),length(x));
for ii=1:length(x)
   res(ii,:)=circshift (x', ii-1)
end