Matlab 如何以更有效的方式创建/索引此矩阵?
我已经写了一个MATLAB代码,可以正常工作,但我想以一种更有效的方式编写它(我不想重复我自己,我想让它干燥) 首先我创建了一个1的矩阵(28*8),然后我想把它的一些元素改成负数 代码如下:Matlab 如何以更有效的方式创建/索引此矩阵?,matlab,matrix,matrix-indexing,Matlab,Matrix,Matrix Indexing,我已经写了一个MATLAB代码,可以正常工作,但我想以一种更有效的方式编写它(我不想重复我自己,我想让它干燥) 首先我创建了一个1的矩阵(28*8),然后我想把它的一些元素改成负数 代码如下: a=ones(28,8); for i=1:7 j=1; a(i,j)=-1; end for i=8:13 j=2; a(i,j)=-1; end for i=14:18 j=3; a(i,j)=-1; end for i=19:22 j=4;
a=ones(28,8);
for i=1:7
j=1;
a(i,j)=-1;
end
for i=8:13
j=2;
a(i,j)=-1;
end
for i=14:18
j=3;
a(i,j)=-1;
end
for i=19:22
j=4;
a(i,j)=-1;
end
for i=23:25
j=5;
a(i,j)=-1;
end
for i=26:27
j=6;
a(i,j)=-1;
end
for i=28:28
j=7;
a(i,j)=-1;
end
所有这些代码实际上可以简化为一行:
a = repelem(ones(7, 8)-2.*eye(7, 8), 7:-1:1, 1);
工作原理:上述解决方案首先创建一个7×8的矩阵,然后减去一个7×8(主对角线上的1)乘以2。这就给出了一个矩阵,在主对角线上有一个负数。然后,它使用复制量来复制每一行,第一行复制量为7,第二行复制量为6,依此类推
a =
-1 1 1 1 1 1 1 1
-1 1 1 1 1 1 1 1
-1 1 1 1 1 1 1 1
-1 1 1 1 1 1 1 1
-1 1 1 1 1 1 1 1
-1 1 1 1 1 1 1 1
-1 1 1 1 1 1 1 1
1 -1 1 1 1 1 1 1
1 -1 1 1 1 1 1 1
1 -1 1 1 1 1 1 1
1 -1 1 1 1 1 1 1
1 -1 1 1 1 1 1 1
1 -1 1 1 1 1 1 1
1 1 -1 1 1 1 1 1
1 1 -1 1 1 1 1 1
1 1 -1 1 1 1 1 1
1 1 -1 1 1 1 1 1
1 1 -1 1 1 1 1 1
1 1 1 -1 1 1 1 1
1 1 1 -1 1 1 1 1
1 1 1 -1 1 1 1 1
1 1 1 -1 1 1 1 1
1 1 1 1 -1 1 1 1
1 1 1 1 -1 1 1 1
1 1 1 1 -1 1 1 1
1 1 1 1 1 -1 1 1
1 1 1 1 1 -1 1 1
1 1 1 1 1 1 -1 1