Matlab 生成矩阵B:利用repmat和diag函数避免循环
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'循环语句。
步骤:
- 将矩阵A转置为一列向量。
- 使用'repmat'函数将其复制为一个10x10的矩阵。
- 使用'diag'函数将矩阵B的每一行转化为对角矩阵,其中对角线上的元素为矩阵A对应行的数值。
- 将所有对角矩阵相加即可得到最终的矩阵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,避免了使用循环语句,提高了代码效率。
原文地址: https://www.cveoy.top/t/topic/plzV 著作权归作者所有。请勿转载和采集!