У меня был очень похожий вопрос, поэтому я не хотел открывать новый.Я хотел преобразовать вектор строки индексов в матрицу с единицами в строках (вместо столбцов) индексов.Я мог бы использовать предыдущий ответ и перевернуть его, но я думал, что это будет работать лучше с очень большими матрицами.
octave> x = [2 1 3 1];
octave> m = setRowsToOne(x, 3)
m =
0 1 0 1
1 0 0 0
0 0 1 0
Я не мог понять, как использовать sub2ind, чтобы выполнить это, поэтому я рассчитал его сам.
function matrixResult = setRowsToOne(indexOfRows, minimumNumberOfRows)
numRows = max([indexOfRows minimumNumberOfRows]);
numCols = columns(indexOfRows);
matrixResult = zeros(numRows, numCols);
assert(indexOfRows > 0, 'Indices must be positive.');
matrixResult(([0:numCols-1]) * numRows + indexOfRows) = 1;
end
x = [2 1 3 1];
m = setRowsToOne(x, 3)