【问题标题】:How can I create/index this matrix in a more efficient way?如何以更有效的方式创建/索引此矩阵?
【发布时间】:2018-07-27 03:36:12
【问题描述】:

我已经编写了一个可以正常工作的 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

【问题讨论】:

    标签: matlab matrix matrix-indexing


    【解决方案1】:

    所有这些代码实际上都可以简化为一行:

    a = repelem(ones(7, 8)-2.*eye(7, 8), 7:-1:1, 1);
    

    工作原理: 上面的解决方案首先创建一个 7×8 的 ones 矩阵,然后减去一个 7×8 的 identity matrix(主对角线上的矩阵)乘以二。这给出了一个在主对角线上带有负数的矩阵。然后它使用repelem 复制每一行,第一行复制 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-09
      • 1970-01-01
      • 2023-01-21
      • 2014-09-21
      • 1970-01-01
      • 2013-11-18
      • 2017-11-23
      • 1970-01-01
      相关资源
      最近更新 更多