У меня есть вектор 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