我很好奇这是做什么的最佳方法:假设我有一个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]
Run Code Online (Sandbox Code Playgroud)
对于这种操作使用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
Run Code Online (Sandbox Code Playgroud)
更新:与无辜的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
Run Code Online (Sandbox Code Playgroud)