Создание двоичной матрицы из массива индексов - PullRequest
0 голосов
/ 28 июня 2018

Определение проблемы

У меня есть два массива, которые называются весами и индексами соответственно:

 weights = [1, 3, 2]; 
 indices = [1, 1, 2, 3, 2, 4]; 

 m = 4; % Number of Rows in Matrix
 n = 3; % Number of Columns in Matrix
 M = zeros(m, n);

Массив под названием indices хранит индексы, где мне нужно хранить 1 в каждом столбце.

Например, для первого столбца в строке 1, который указан в индексах (1), мне нужно сохранить 1, и это указано весами (1), которые равны 1.

  M(indices(1), 1) = 1;

Для столбца 2, в строках 1–3 (индексы (2: 4)) мне нужно сохранить 1. Диапазон индексов для столбца 2 снова обозначен весами (2).

  M(indices(2:4),2) = 1;

Аналогичным образом, для столбца 3, в строках 2 и 4 (индексы (5: 6)) мне нужно сохранить 1. Диапазон индексов для столбца 3 снова указывается весами (3).

  M(indices(5:6),3) = 1; 

Ожидаемая двоичная матрица

Ожидаемая и получающаяся двоичная матрица:

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

Решение

Есть ли способ, которым я могу сделать это в обобщенном виде, используя массивы весов и индексов, вместо того, чтобы делать это жестко, чтобы создать двоичную матрицу M?

1 Ответ

0 голосов
/ 28 июня 2018

У вас просто странный способ описания ваших индексов, поэтому вам просто нужно преобразовать их во что-то стандартное.

columsn_idx=repelem(1:n,weights);       % repeat column number as much as needed
row_idx=indices ;                       % just for clarity
M(sub2ind([m,n],row_idx,columsn_idx))=1;% Use linear indices
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...