ordered/circular 烫发的八度函数
octave function for ordered/circular perms
所以在八度音程中我可以做到这一点
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
有内置函数吗?
是的,使用 circshift。
x=[1 2 3];
res=zeros(length(x),length(x));
for ii=1:length(x)
res(ii,:)=circshift (x', ii-1)
end
函数 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
所以在八度音程中我可以做到这一点
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
有内置函数吗?
是的,使用 circshift。
x=[1 2 3];
res=zeros(length(x),length(x));
for ii=1:length(x)
res(ii,:)=circshift (x', ii-1)
end
函数 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