мне нужна функция для вычисления полной матрицы для бинарной матрицы?

если у меня есть (строки,столбцы) матрица M, как это

   M = [ 1 1 0 1 0 1
         0 1 1 0 1 0
         1 0 1 0 1 0
         0 1 0 1 0 1 
         1 1 0 1 1 1 ]

затем я нашел эти две матрицы M_row и M_col

  M_row = [ 2 1 1 
            2 1 0
            1 1 1
            1 1 1
            2 3 0 ] 

который M_row показывает, сколько единиц в каждой группе единиц в каждой строке в M

после этого я финансирую sum_row и count_row как тот, который

sum_row показывает сумму элемента в M_row

  sum_row = [ 4
              3
              3
              3
              5 ]

count_row показывает количество ненулевых элементов в M_row

  count_row = [ 3
                2
                3
                3
                2 ]

например, последняя строка в M_row [1 3 0], которая показывает, что есть [1 0 0 1 1 1]

я хочу, чтобы функция

  • сначала сгенерируем (строки,столбцы) нули матрицы X
  • второй

     for k=1:n 
        if sum_row(k) +  count_row(k) - 1 == columns then 
    go back to M_row and convert this row element to group ones 
    

например, k=1, 4+3-1 = 6, которые делают условие истинным, затем идут в m_row и преобразуют [ 2 1 1] в [ 1 1 0 1 0 1]

окончательный ответ будет

      X = [ 1 1 0 1 0 1
            0 0 0 0 0 0
            0 0 0 0 0 0
            0 0 0 0 0 0
            1 1 0 1 1 1 ]

1 ответ

  1. Хорошо, я дам быстрый выстрел:

    X = zeros(size(M));
    numCols = size(M, 2);
    for k=1:length(count_row)
        if sum_row(k)+count_row(k)-1 == numCols
           X(k,:) = M(k,:);
        end
    end
    

    IMO, нет необходимости конвертировать обратно из M в X, просто возьмите всю строку M в X, если условие выполнено.

    Я опустил векторизованный код (который лучше, короче и быстрее) для вашего понимания (т. е. for-loop легче понять). Если вы хотите ускорить его, подумайте о реализации векторизованного индексирования самостоятельно, а не с помощью for-loop.


    Из того , что я прочитал из комментария: у вас нетM, у вас только есть M_row. Хорошо, тогда, пожалуйста, сначала используйте решение из вашего другого вопроса: Как генерировать случайную бинарную матрицу с определенным условием в matlab? создание M_restoredM_rowи использование моего кода для создания XM_restored.