Вектор в матрицу с суммой строк 1 - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть логический 1 на n вектор с суммой m.Теперь мне нужно преобразовать ее в матрицу m-by-n таким образом, чтобы сумма строк была равна 1.

vector (1-by-8) with sum 4
[0 1 0 0 1 0 1 1]

matrix (4-by-8) with row sum 1
[0 1 0 0 0 0 0 0;
 0 0 0 0 1 0 0 0;
 0 0 0 0 0 0 1 0;
 0 0 0 0 0 0 0 1]

Существует ли математически эффективный способ без вычисления суммы, создания пустой матрицы, цикл по вектору и добавление строки 1 за строкой?

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

Вот еще один метод, использующий sparse:

matrix = full(sparse(1:m, find(vector), 1, m, n));
0 голосов
/ 29 сентября 2018

Я думаю, что в этом случае, учитывая ваши данные, вам даже не нужно вычислять сумму.Вы можете определить единичную матрицу размером n , а затем использовать свой входной вектор для выборки из нее необходимых строк:

I = eye(n);
y = I(x, :) ; % Output Matrix. x is the input vector
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...