Matlab如何随机分配矩阵元素

时间:2016-10-09 06:20:48

标签: matlab matrix distribute

大家好,如何使矩阵随机分布到另一个矩阵n,

m = [ 1 1 3 3 3 4 4 6 6 7 7 7];
n = zeros(3,10);

序列中必须有相同的值,例如:4 4 4,7 7 7.结果可以是{或其他组合}:

distributed_matrix =

 0     1     1     0     7     7     7     0     0     0
 0     0     3     3     3     4     4     0     0     0
 6     6     6     0     0     0     0     0     0     0
谢谢......

2 个答案:

答案 0 :(得分:3)

如果您没有对m元素的分发顺序施加任何约束,那么randsample可能有所帮助:

ridx = randsample( numel(n), numel(m) ); %// sample new idices for elelemtns
n(ridx) = m;

调查additional constraints,事情变得更加混乱 要在m中识别序列及其范围,您可以:

idx = [1 find(diff(m)~=0)+1]; 
extent = diff([idx numel(m)+1]);  %// length of each sequence
vals = m(idx);  %// value of each sequence

一旦你得到了它们的长度和长度,你可以随机地将它们洗牌然后沿着这些线分布......

答案 1 :(得分:2)

如果我正确理解您的问题,可能的解决方案是

m = [ 1 1 3 3 3 4 4 6 6 7 7 7];
n = zeros(3,10);
p= randperm(numel(n)); % generate the random permutation
n(p(1:length(m)))= m   % assign the elments of m to the elements with indices taken 
                       % from the first length(m) numbers of random permutation