我怎样才能更有效地 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
我已经编写了一个 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