Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.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
Algorithm Matlab中的置换函数_Algorithm_Matlab_Wolfram Mathematica_Permutation - Fatal编程技术网

Algorithm Matlab中的置换函数

Algorithm Matlab中的置换函数,algorithm,matlab,wolfram-mathematica,permutation,Algorithm,Matlab,Wolfram Mathematica,Permutation,在Wolfram Mathematica中,有一个函数称为置换()。 它可以给出正好包含n个元素的所有置换 例如:置换[{1,2,3,4},{2}]给出 {1,2},{1,3},{1,4},{2,1},{2,3},{2,4},{3,1},{3,2},{3, 4} ,{4,1},{4,2},{4,3} 我知道Matlab有一个类似的函数perms,但它只接收一个参数,并给出所有可能的排列。是否还有其他类似Mathematica的置换[list,{n}]的函数?如果顺序不重要,请查看nchoosek

在Wolfram Mathematica中,有一个函数称为
置换
()。 它可以给出正好包含n个元素的所有置换

例如:
置换[{1,2,3,4},{2}]
给出

{1,2},{1,3},{1,4},{2,1},{2,3},{2,4},{3,1},{3,2},{3,
4} ,{4,1},{4,2},{4,3}


我知道Matlab有一个类似的函数
perms
,但它只接收一个参数,并给出所有可能的排列。是否还有其他类似Mathematica的
置换[list,{n}]
的函数?

如果顺序不重要,请查看
nchoosek

如果是这样的话(似乎是这样),则会有一个低效、丑陋但不依赖工具箱的一行程序:

>> unique(builtin('_paren', perms(1:4), :,1:2), 'rows')
ans =
      1     2
      1     3
      1     4
      2     1
      2     3
      2     4
      3     1
      3     2
      3     4
      4     1
      4     2
      4     3
(这确实是)


我建议您只使用统计工具箱中的
combnk

如果顺序不重要,请查看
nchoosek

如果是这样的话(似乎是这样),则会有一个低效、丑陋但不依赖工具箱的一行程序:

>> unique(builtin('_paren', perms(1:4), :,1:2), 'rows')
ans =
      1     2
      1     3
      1     4
      2     1
      2     3
      2     4
      3     1
      3     2
      3     4
      4     1
      4     2
      4     3
(这确实是)


我建议您只使用统计工具箱中的
combnk

您可以使用
nchoosek
获得所需大小的所有组合,然后使用
perms
进行排列。这意味着对于向量
v
中长度
k
的排列,您可以使用

A=nchoosek(v,k);
P=reshape(A(:,perms(1:k)), [], k);
请注意,
p
的行不会被排序,您可以使用
sortrows
对其进行排序:

P=sortrows(reshape(A(:,perms(1:k)), [], k));
以你为例

v = 1:4;
k = 2;
A=nchoosek(v,k);
P=sortrows(reshape(A(:,perms(1:k)), [], k))
返回:

P =
     1     2
     1     3
     1     4
     2     1
     2     3
     2     4
     3     1
     3     2
     3     4
     4     1
     4     2
     4     3

您可以使用
nchoosek
获得所需大小的所有组合,然后使用
perms
进行排列。这意味着对于向量
v
中长度
k
的排列,您可以使用

A=nchoosek(v,k);
P=reshape(A(:,perms(1:k)), [], k);
请注意,
p
的行不会被排序,您可以使用
sortrows
对其进行排序:

P=sortrows(reshape(A(:,perms(1:k)), [], k));
以你为例

v = 1:4;
k = 2;
A=nchoosek(v,k);
P=sortrows(reshape(A(:,perms(1:k)), [], k))
返回:

P =
     1     2
     1     3
     1     4
     2     1
     2     3
     2     4
     3     1
     3     2
     3     4
     4     1
     4     2
     4     3

FEX上有一个:FEX上有一个:+1,但我建议您也添加两行等效线以确保易读性。+1,但我建议您也添加两行等效线以确保易读性。