MATLAB中如何无循环将n元素向量生成每行同原向量的n×n矩阵
MATLAB无循环构造行重复n阶矩阵实现方案
需求说明
给定长度为n的向量A,不使用任何循环语句生成n×n矩阵B,要求B的每一行元素与向量A完全一致。例如当A = [1 2 3 4 5 6]时,输出6×6矩阵,所有行均为[1 2 3 4 5 6]。
可用实现方法
以下三种方法均无需编写循环,全部基于MATLAB内置能力实现,运行效率高:
- 方法1:使用数组复制函数
repmatrepmat是MATLAB原生的数组重复拼接函数,直接指定行、列复制次数即可得到结果,是最直观的实现方式:n = length(A); B = repmat(A, n, 1); % 将A按「纵向复制n次、横向复制1次」的规则拼接 - 方法2:通过矩阵乘法实现
利用线性代数运算性质:n维全1列向量与1×n行向量A相乘,得到的n×n矩阵每一行都与原行向量A完全一致。该方法底层经过矩阵运算优化,大维度场景下运行速度极快:n = length(A); B = ones(n, 1) * A; - 方法3:利用下标索引复制实现
MATLAB支持传入重复下标实现数组维度的自动扩展,构造全1的索引数组提取A的第一行(行向量A仅存在1行),即可自动将该行重复n次生成目标矩阵:n = length(A); B = A(ones(n, 1), :);
效果验证
以上述示例向量A = [1 2 3 4 5 6]为例,任意一种方法运行后得到的矩阵B均为:
B = 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6
注意:如果输入A是列向量,只需先将A转置为行向量(即
A = A.')再调用上述方法即可。
内容的提问来源于stack exchange,提问作者NISHA MB
相关产品推荐
相关产品推荐

