Matlab 如何以更有效的方式创建/索引此矩阵?

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;

我已经写了一个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(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