Matlab конвертировать вектор в двоичную матрицу [дубликаты]

На этот вопрос уже есть ответ здесь:

Создайте заполненный нулями 2D массив с единицами в позициях, проиндексированных вектором 4 ответа

У меня есть вектор v размером (m, 1), элементы которого являются целыми числами, выбранными из 1: n. Я хочу создать матрицу M размера (m, n), элементы которой M (i, j) равны 1, если v (i) = j, и 0 в противном случае. Я не хочу использовать циклы и хотел бы реализовать это как простую манипуляцию векторной матрицей.

Поэтому я сначала подумал, чтобы создать матрицу с повторяющимися элементами

 M = v * ones(1,n) % this is a (m,n) matrix of repeated v

Например, v = [1,1,3,2] 'm = 4 и n = 3

M =
     1     1     1
     1     1     1
     3     3     3
     2     2     2

тогда мне нужно создать вектор сравнения c размера (1, n)

c = 1:n
1 2 3

Тогда мне нужно выполнить серию логических сравнений

M(1,:)==c % this results in [1,0,0]
.
M(4,:)==c % this results in [0,1,0]

Тем не менее, я подумал, что должна быть возможность выполнить последние шаги прохождения каждой отдельной строки в компактной матричной записи, но я озадачен и недостаточно разбираюсь в индексации. Конечный результат должен быть

M =
     1     0     0
     1     0     0
     0     0     1
     0     1     0

Ответы на вопрос(3)

Ваш ответ на вопрос