Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何计算数组的循环置换?_Matlab_Math - Fatal编程技术网

Matlab 如何计算数组的循环置换?

Matlab 如何计算数组的循环置换?,matlab,math,Matlab,Math,如何在matlab中计算数组的循环置换easy[1 2 3 4]。matlab中有没有可以直接计算循环置换的函数 circshift做你需要的吗?circshift做你需要的吗?你可以使用circshift来移动圆中的数组元素。然后始终拾取数组的相同值: A=(1:5)'; P = A(1); P = 1 Y = circshift(A,1); P = A(1); P = 5; 您可以使用circshift移动圆中的数组元素。然后始终拾取数组的相同值: A=(1:5)'

如何在matlab中计算数组的循环置换easy[1 2 3 4]。matlab中有没有可以直接计算循环置换的函数

circshift做你需要的吗?

circshift做你需要的吗?

你可以使用circshift来移动圆中的数组元素。然后始终拾取数组的相同值:

A=(1:5)';
P = A(1);

P = 
    1

Y = circshift(A,1);
P = A(1);

P =
    5;

您可以使用circshift移动圆中的数组元素。然后始终拾取数组的相同值:

A=(1:5)';
P = A(1);

P = 
    1

Y = circshift(A,1);
P = A(1);

P =
    5;

我假设循环置换的意思是(
1234
被认为是与其循环移位相同的置换
23441
;您希望所有置换彼此之间的任何循环移位都不同):

一种可能的方法是生成所有排列,识别循环相等的排列,并且每个组只保留一个排列。这可以只保留那些以给定索引开始的排列,例如1。由此可知,问题可以通过生成元素2,3。。。以及前面的连接元件1:

x = [ 1 2 3 4 ]; %// data

p = perms(x(2:end)); %// generate all permutations of x(2), x(3), ...
p = [ repmat(x(1),size(p,1),1) p ]; %// attach x(1) in front of each permutation
在本例中,结果是:

p =
     1     2     3     4
     1     2     4     3
     1     3     2     4
     1     3     4     2
     1     4     2     3
     1     4     3     2

或者,如果您的意思是(您希望生成彼此循环移位的所有置换:
1234
2341
,等等;类似于
1234
的内容是不允许的):

结果:

p =
     1     2     3     4
     2     3     4     1
     3     4     1     2
     4     1     2     3

我假设循环置换的意思是(
1234
被认为是与其循环移位相同的置换
23441
;您希望所有置换彼此之间的任何循环移位都不同):

一种可能的方法是生成所有排列,识别循环相等的排列,并且每个组只保留一个排列。这可以只保留那些以给定索引开始的排列,例如1。由此可知,问题可以通过生成元素2,3。。。以及前面的连接元件1:

x = [ 1 2 3 4 ]; %// data

p = perms(x(2:end)); %// generate all permutations of x(2), x(3), ...
p = [ repmat(x(1),size(p,1),1) p ]; %// attach x(1) in front of each permutation
在本例中,结果是:

p =
     1     2     3     4
     1     2     4     3
     1     3     2     4
     1     3     4     2
     1     4     2     3
     1     4     3     2

或者,如果您的意思是(您希望生成彼此循环移位的所有置换:
1234
2341
,等等;类似于
1234
的内容是不允许的):

结果:

p =
     1     2     3     4
     2     3     4     1
     3     4     1     2
     4     1     2     3

使用
toeplitz
矩阵:

%// Some random data
A = randi(100,[1 n]);

%// all circular shifts to the right
A(toeplitz(1:numel(A), [1 numel(A):-1:2]))

%// all circular shifts to the left
A(rot90(toeplitz(1:numel(A), [1 numel(A):-1:2])))

可能不是最快的,但很高兴知道:)

使用
toeplitz
矩阵:

%// Some random data
A = randi(100,[1 n]);

%// all circular shifts to the right
A(toeplitz(1:numel(A), [1 numel(A):-1:2]))

%// all circular shifts to the left
A(rot90(toeplitz(1:numel(A), [1 numel(A):-1:2])))

可能不是最快的,但很高兴知道:)

你想要一个包含所有循环置换的矩阵,还是只包含一个(随机?)循环置换?@LuisMendo我想要所有循环置换你想要一个包含所有循环置换的矩阵,还是只包含一个(随机?)循环置换的矩阵循环置换?@LuisMendo我要所有的循环置换permutations@Deepesh:哪种解决方案适合您的需要?第一个还是第二个?@Deepesh:哪种解决方案适合您的需要?第一个还是第二个?