2015-12-15 53 views
-2

你能帮助我吗?我有矩阵,但我想要在矩阵中有更多的“fixed_pa​​rt”并随机选择。同样重要的是每一行都是独一无二的。你可以帮帮我吗?在矩阵中随机排序位

clear all 
clc 
ntags = 50; 
fixed_part = 20; 
IDlength = 64; 




tag_population = [zeros(ntags, fixed_part), floor(rand(ntags,IDlength-fixed_part)*2)]; 
tag_population = unique(tag_population,'rows'); 

查找这个矩阵:

0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 
0 0 0 0 1 0 0 0 0 0 0 0 1 1 1 0 
0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 
0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 
0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 

在这个例子中我有四个不同类型的 “fixed_pa​​rt” 的。

+0

对不起,您所说的“更多fixed_pa​​rt”是什么意思?更高的价值? – hbaderts

+0

@hbaderts,''fixed_pa​​rt''表示'0和1'随机排序的组之间有多少'0'。我想要更多的'fixed_pa​​rt'在矩阵 – NikolaC

+0

我可能仍然理解你错了(对不起,如果是这样的话),但是你不能只将'fixed_pa​​rt'设置为更高的数字。 30,得到那个? – hbaderts

回答

0

要与你想要的全矩阵回答:

for t = 1:size(A,1) 
    Y(t,:) = circshift(A(t,:)',randi([1 size(A,2)],1,1)') 

%//EDIT added first 4 digits cannot be 0 
    while sum(Y(t,1:4) > 0) 
    Y(t,:) = circshift(A(t,:)',2) 
    end 

%//Be warned, can run into infinite loop if the first 4 digits must contains at least a 1. 

end 

其中A是你的输入矩阵。

Y =

0  0  0  0  1  1  0  0  0  0  1  0  0  0  0  0 
0  0  0  0  1  0  0  0  0  0  0  0  1  1  1  0 
0  0  0  0  0  1  1  1  0  0  0  0  0  0  0  0 
0  0  0  0  0  0  1  1  0  0  0  0  0  0  0  1 
0  0  0  0  0  0  0  0  0  1  0  1  0  0  0  0 
0  0  0  0  0  0  1  0  0  0  0  0  0  0  0  0 
0  0  0  0  0  0  1  0  0  0  0  1  1  0  0  0 
0  0  0  0  0  0  0  0  0  0  0  0  1  1  1  0 
0  0  0  0  0  1  0  0  0  0  0  0  0  0  0  0 
0  0  0  0  0  1  1  1  0  0  0  0  0  0  0  0 

已经增加了 “更固定部分” 吧?

+0

这很好,但是我不应该在前四个职位上有一个。 – NikolaC

+0

@NikolaC我编辑了我的答案以包含变更 – GameOfThrows

+0

它是不断的路径。 Ii不工作 – NikolaC