根据matlab中的坐标替换矩阵中的元素

时间:2011-05-08 02:23:42

标签: matlab

我很好奇最好的方法是什么: 假设我有一个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 个答案:

答案 0 :(得分:5)

对于这种操作,请使用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

更新:将此与无辜的assigmnet 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

答案 1 :(得分:3)

您可以通过将特定行和列索引到矩阵中并将值分配给对角线来执行您想要的操作。

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