Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.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_Matrix_Random_Vector_Permutation - Fatal编程技术网

Matlab 将指定的向量元素附加到向量的所有置换中,';大部分是随机的';邻近整数等的行排序

Matlab 将指定的向量元素附加到向量的所有置换中,';大部分是随机的';邻近整数等的行排序,matlab,matrix,random,vector,permutation,Matlab,Matrix,Random,Vector,Permutation,在Matlab中 1) 如果我有一个向量,比如说[1,2,3],那么我要创建一个矩阵,它包含向量的每一个置换,另外一列附加,每个置换包含原始向量的第一个元素。然后,我希望将这个矩阵(按行)附加到另一个矩阵,其中附加的列是第二个元素。接下来的第三个也是一样的。i、 e: 3 2 1 1 3 1 2 1 2 3 1 1 2 1 3 1 1 2 3 1 1 3

在Matlab中

1) 如果我有一个向量,比如说[1,2,3],那么我要创建一个矩阵,它包含向量的每一个置换,另外一列附加,每个置换包含原始向量的第一个元素。然后,我希望将这个矩阵(按行)附加到另一个矩阵,其中附加的列是第二个元素。接下来的第三个也是一样的。i、 e:

 3     2     1     1
 3     1     2     1
 2     3     1     1
 2     1     3     1
 1     2     3     1
 1     3     2     1
 3     2     1     2
 3     1     2     2
 2     3     1     2
 2     1     3     2
 1     2     3     2
 1     3     2     2
 3     2     1     3
 3     1     2     3
 2     3     1     3
 2     1     3     3
 1     2     3     3
 1     3     2     3
这是一种很长的写作方式,但我相信这里的人可以用非常简洁的方式来代替:

a = [1 2 3]; b = perms(a); 
c = [a(1); a(1); a(1); a(1); a(1); a(1)] ;
d = [a(2); a(2); a(2); a(2); a(2); a(2)] ;
e = [a(3); a(3); a(3); a(3); a(3); a(3)] ;
f = [ c; d; e ]
g = [ b; b ; b]
h = [g f]
2) 有没有一种方法可以进行“大部分是随机的”排序,比如你有一个如下列表:

64    69    72    72
64    72    69    75
76    67    72    70
62    69    65    72
71    74    65    77
74    69    65    72
67    71    74    74
67    76    72    79
76    79    71    82
60    64    69    67
64    67    72    70
67    64    60    67
72    65    69    68
74    71    65    74
65    69    62    72
71    74    67    77
71    62    65    65
67    72    64    75
77    74    71    77
76    72    67    75
77    69    74    72
74    67    71    70
79    71    74    74
76    71    79    74
69    62    65    65
65    62    71    65
69    65    74    68
69    64    60    67
71    79    74    82
71    74    77    77
69    74    77    77
72    69    77    72
77    72    69    75
74    65    71    68
71    62    67    65
71    77    74    80
74    77    71    80
77    71    74    74
69    65    72    68
65    71    74    74
67    71    76    74
64    67    60    70
65    72    69    75
71    74    79    77
72    76    69    79
67    62    71    65
72    69    65    72
69    72    76    75
79    74    71    77
72    67    64    70
71    67    76    70
67    72    76    75
71    65    74    68
65    69    60    72
69    72    77    75
64    69    60    72
76    69    72    72
69    76    72    79
64    72    67    75
72    77    69    80
67    76    71    79
69    60    65    63
67    60    64    63
71    64    67    67
69    60    64    63
71    67    62    70
60    64    67    67
74    69    77    72
65    74    71    77
62    71    65    74
67    71    64    74
65    74    69    77
76    67    71    70
62    67    71    70
74    71    79    74
77    74    69    77
67    64    71    67
62    65    71    68
65    60    69    63
62    65    69    68
60    69    65    72
71    65    62    68
65    69    74    72
67    74    71    77
71    79    76    82
69    74    65    77
69    77    72    80
67    71    62    74
72    64    67    67
74    77    69    80
76    72    69    75
69    72    65    75
71    76    79    79
64    60    67    63
64    60    69    63
74    65    69    68
79    76    71    79
64    67    71    70
72    67    76    70
72    76    67    79
69    65    60    68
60    67    64    70
69    64    72    67
69    65    62    68
65    62    69    65
74    71    67    74
65    69    72    72
72    69    64    72
60    69    64    72
76    71    67    74
64    71    67    74
60    65    69    68
74    79    71    82
65    71    62    74
67    64    72    67
71    67    74    70
79    71    76    74
62    71    67    74
74    71    77    74
71    67    64    70
72    64    69    67
71    76    67    79
69    77    74    80
77    69    72    72
69    72    64    75
72    69    76    72
您可以对其进行排序,以使行顺序是随机的,但第一列中的所有数字大多通过定义的参数彼此接近(例如,62后面可能跟67或58,但后面不会跟80)?(为了让事情变得更加复杂,有没有一种方法可以指定这种情况大部分时间都会发生,但不是所有时间都会发生?)

3) 创建列向量的简洁方法是什么

0
0
0
0
1
1
1
1
2
2
2
2
3
3
3
3
等,直到指定的长度(或者,如果没有,直到指定的数字)?

对于1)您可以使用以下代码:

%sprows is just a utility function, which splits a matrix into a cell
sprows=@(x)(mat2cell(x,ones(size(x,1),1)))
%get all combinations of perms(a) and a
cell2mat(allcomb(sprows(perms(a)),sprows(a(:))))
它使用matlab文件交换中的
allcomb
,可用

3) :


正如在评论中告诉您的,您的问题2定义不够。它本身可能值得提出一个问题,对约束条件进行更详细的解释


也就是说,1)和2)的另一种选择是:
有很多方法可以做到这一点

问题1: 千里迢迢

a = [1 2 3] ; %// starting set

n = numel(a) ;
lastCol = ones(factorial(n),1) * a ;
ap = [repmat(perms(a),n,1) lastCol(:)] ;
或直接无中间变量:

ap = [repmat(perms(a),numel(a),1) reshape(ones(factorial(numel(a)),1)*a,[],1)] ;

问题3: 与上述方法相同。重塑为列向量的矩阵乘法:

n = 3       %// your specified number

v = 0:n ;
Vlong = reshape(ones(numel(v),1)*v,[],1) ;

你能明确表示2吗?对于2):这还不足以解决这个问题,但是拒绝抽样可能是一个解决方案。你已经有了关于第一季度和第三季度的两个答案(你可能会得到更多答案)。我建议你将Q2从这篇文章中删除,并单独发布,给出更明确的排序规则细节。它太模糊了,因为它是…谢谢你@hoki-我几乎肯定会尝试在一分钟内。目前我刚刚更新了输入,所以我想知道这是否有帮助?我希望按照第一列中的数字对行进行排序,我希望它们是随机的,但它们总是彼此接近(例如…63后面可能跟68或59,但不是说85…?)
n = 3       %// your specified number

v = 0:n ;
Vlong = reshape(ones(numel(v),1)*v,[],1) ;