2015-11-20 2 views
0

ПредположимаПостроить простую указательную матрицу из нулевой матрицы

A = zeros(5,3); 
X = [1;2;3;2;1]; 

То, что я хочу, чтобы получить следующее: для каждого из пяти рядов А, замените «0» с «1», и положение замены обозначается вектором X. Таким образом, в этом простом примере, матрица должна быть получена в

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

есть хороший способ, чтобы получить матрицу, как это, не вовлекая цикл по строкам?

+0

Какой язык программирования вы используете? – Schizo

+1

Jie Wei - Я добавил тег MATLAB. Если это неверно, отредактируйте и замените его соответствующим тегом. – beaker

+0

Это было предсказано до смерти. См. Дубликат. Для дубликата просто транспонируйте конечный результат, чтобы достичь того, чего вы хотите. – rayryeng

ответ

3

Это следует сделать это:

A(sub2ind([5, 3], (1: 5)', X)) = 1 

Я не MATLAB со мной прямо сейчас, но он работает в Scilab.

+2

Работает в MATLAB! В общем случае для 'A' n-by-m и' X' n-by-1: 'A (sub2ind ([n, m], (1: n) ', X)) = 1' – Geoff

+0

@Geoff Спасибо за обобщение! В своей спешке, чтобы опубликовать, я жестко закодировал его для матрицы размером 5 х 3. –

Смежные вопросы