Заменить элементы в матрице в соответствии с координатами в Matlab - PullRequest
5 голосов
/ 08 мая 2011

Мне интересно, как лучше всего это сделать: Предположим, у меня нулевая матрица 10x10, и я хочу заменить нули на известные с координатами, в начале я собираюсь написать цикл for, чтобы заменить элементы один на один, считывая x и y. Есть ли другой способ сделать это проще?

Пример:

mat=zeros(10);
x=[1,3,5,7,9]'; 
y=[2,4,6,8,10]';
newmat= [0 0 0 0 0 0 0 0 0 0
         1 0 0 0 0 0 0 0 0 0 
         0 0 0 0 0 0 0 0 0 0
         0 0 1 0 0 0 0 0 0 0
         0 0 0 0 0 0 0 0 0 0
         0 0 0 0 1 0 0 0 0 0
         0 0 0 0 0 0 0 0 0 0 
         0 0 0 0 0 0 1 0 0 0
         0 0 0 0 0 0 0 0 0 0
         0 0 0 0 0 0 0 0 1 0]  

Ответы [ 2 ]

5 голосов
/ 08 мая 2011

Для этого вида манипуляций используйте sub2ind , например

> mat=zeros(10); x=[1,3,5,7,9]'; y=[2,4,6,8,10]';
> mat(sub2ind([10 10], y, x))= 1
mat =
   0   0   0   0   0   0   0   0   0   0
   1   0   0   0   0   0   0   0   0   0
   0   0   0   0   0   0   0   0   0   0
   0   0   1   0   0   0   0   0   0   0
   0   0   0   0   0   0   0   0   0   0
   0   0   0   0   1   0   0   0   0   0
   0   0   0   0   0   0   0   0   0   0
   0   0   0   0   0   0   1   0   0   0
   0   0   0   0   0   0   0   0   0   0
   0   0   0   0   0   0   0   0   1   0

Обновление: Чтобы сопоставить это с невинно выглядящим ассигмнетом mat(y, x)= 1.

> mat= zeros(10);
> mat(y, x)= 1
mat =
   0   0   0   0   0   0   0   0   0   0
   1   0   1   0   1   0   1   0   1   0
   0   0   0   0   0   0   0   0   0   0
   1   0   1   0   1   0   1   0   1   0
   0   0   0   0   0   0   0   0   0   0
   1   0   1   0   1   0   1   0   1   0
   0   0   0   0   0   0   0   0   0   0
   1   0   1   0   1   0   1   0   1   0
   0   0   0   0   0   0   0   0   0   0
   1   0   1   0   1   0   1   0   1   0
3 голосов
/ 08 мая 2011

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

mat(y,x)=eye(length(x))
mat =

     0     0     0     0     0     0     0     0     0     0
     1     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0
     0     0     1     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     1     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     1     0     0     0
     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     1     0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...