2014-10-09 2 views
0

У меня есть матрица, содержащая N записей, каждая из которых содержит M строк. Каждая строка содержит 0s и 1s. Я хочу создать вторую матрицу с одинаковым размером, но в каждой строке должно быть оставлено только одно 1, каждое другое значение должно быть 0. Какое значение должно быть равно 1, должно быть выбрано случайным образом.Сохранять случайные значения из матрицы

т.д .:

0 1 1 0 1 
1 1 0 0 1 
0 0 1 1 0 
-> 
0 1 0 0 0 
1 0 0 0 0 
0 0 0 1 0 

ответ

0

Прочитайте документацию find и randperm

%//preallocate the output matrix 
out = zeros(size(a)); 

%for each row, take a random sample from the indices holding value 1  
for i = 1:size(a,1) 
    temp2 = find(a(i,:)); 
    out(i,temp2(randperm(numel(temp2))(1))) = 1; 
end 

Часы Код в действии here