Как преобразовать индекс ненулевых элементов матрицы в строку - PullRequest
2 голосов
/ 22 декабря 2011

Учитывая двоичную матрицу A размера nxk , я хотел бы создать метку размером nx 1 , такую, чтобы метка (1) содержала строка с номерами столбцов A (1, :), где записи равны 1.
например, если A (1, :) = [0 1 0 1], то Label (1) = '24'
если A (2, :) = [0 0 1 0], то Label (2) = '3'
если A (3,:) = [1 1 1 1], то Label (3) = «1234» и т. д.

Ответы [ 3 ]

1 голос
/ 22 декабря 2011
Label = {};
for i = 1:size(A, 1)
    Label{i, 1} = regexprep(num2str(find(A(i, :))), ' ', '');
end
1 голос
/ 22 декабря 2011

без цикла:

A=[0 1 0 1; 0 0 1 0; 1 1 1 1];
[i,j]=find(A');
nums = mat2cell(i,hist(j,1:max(j)));
printnum = @(x) sprintf('%d',x);
cellfun(printnum, nums, 'UniformOutput', 0)

Выход:

ans = 

    '24'
    '3'
    '1234'
1 голос
/ 22 декабря 2011

Попробуй так:

function Labels = GetNonZeroEntries(A)  
    Labels = {};  
    for i=1:size(A,1)    
        ind = find(A(i,:));    
        indSt = num2str(ind);    
        Labels{i} = '';    
        for j=1:numel(indSt)    
            Labels{i} = [Labels{i} indSt(j)];    
        end  
    end  
end

Тогда беги так:

GetNonZeroEntries([0 1 0; 1 1 0; 1 1 1])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...