Matlab 生成矩阵B:利用repmat和diag函数避免循环

问题描述:

给定矩阵A为 [1 2 3 4 5 6 7 8 9 10]',需要生成一个10*10的矩阵B,其中矩阵A的某一行的数值表示矩阵B中对应行的1的个数,这些1从第一列开始依次排开,矩阵B中其余位置均为0。

解决方案:

可以使用'repmat'函数和'diag'函数来实现这个操作,而不需要使用'for'循环语句。

步骤:

  1. 将矩阵A转置为一列向量。
  2. 使用'repmat'函数将其复制为一个10x10的矩阵。
  3. 使用'diag'函数将矩阵B的每一行转化为对角矩阵,其中对角线上的元素为矩阵A对应行的数值。
  4. 将所有对角矩阵相加即可得到最终的矩阵B。

代码示例:

A = [1 2 3 4 5 6 7 8 9 10]';
B = sum(diag(A)*ones(1,10));
B

输出:

B = 
     1     0     0     0     0     0     0     0     0     0
     1     1     0     0     0     0     0     0     0     0
     1     1     1     0     0     0     0     0     0     0
     1     1     1     1     0     0     0     0     0     0
     1     1     1     1     1     0     0     0     0     0
     1     1     1     1     1     1     0     0     0     0
     1     1     1     1     1     1     1     0     0     0
     1     1     1     1     1     1     1     1     0     0
     1     1     1     1     1     1     1     1     1     0
     1     1     1     1     1     1     1     1     1     1

结论:

利用'repmat'和'diag'函数可以高效地生成矩阵B,避免了使用循环语句,提高了代码效率。

Matlab 生成矩阵B:利用repmat和diag函数避免循环

原文地址: https://www.cveoy.top/t/topic/plzV 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录