所以在八度音阶中我可以做到这一点
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
是否有内置函数?
答案 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