我怎样才能更有效地 create/index 这个矩阵?

How can I create/index this matrix in a more efficient way?

我已经编写了一个 MATLAB 代码,可以正常工作,但我想以更有效的方式编写它(我不想重复我自己,我想把它弄干)。

起初我创建了一个矩阵 (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);

工作原理: 上面的解决方案首先创建一个 ones, then subtracts off a 7-by-8 identity matrix (ones on the main diagonal) multiplied by two. This gives a matrix of ones with negative ones on the main diagonal. It then uses repelem 的 7×8 矩阵,以将每一行的第一行复制 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