通过多次合并相同的行向量来构建矩阵

8
有没有一个Matlab函数可以让我执行以下操作? x = [1 2 2 3]; 然后基于x,我想构建矩阵m = [1 2 2 3; 1 2 2 3; 1 2 2 3; 1 2 2 3]
2个回答

12

您正在寻找 REPMAT 函数:

x = [1 2 2 3];
m = repmat(x,4,1);
您还可以使用索引来重复行:
m = x(ones(4,1),:);

甚至可以使用外积:

m = ones(4,1)*x;

同时还使用了BSXFUN:

m = bsxfun(@times, x, ones(4,1))

如果我想构建 m = [1 2 2 3; 2 4 4 6; 3 6 6 9],该怎么做? - Simon
2
使用BSXFUN解决方案:m = bsxfun(@times, x, (1:3)') - Amro
如果我没记错的话,使用索引比使用repmat更快。但是它也不太易读。 - MarkV

0
你可以尝试使用vertcat,像这样:
x = [1 2 2 3];
m = vertcat(x,x,x,x);

甚至可以更简单:
x = [1 2 2 3];
m = [x;x;x;x];

编辑:

对于x的倍数,您可以这样做:

x = [1 2 2 3];
m = [x;2*x;3*x];  %  [1 2 2 3; 2 4 4 6; 3 6 6 9]

编辑2:

对于m中任意数量的x...

n = 3; % number of repetitions...
x = [1 2 2 3];
m = [];
for i=1:n
    m = [m;x];
end

问题在于我想传递一个带有倍数的参数。我想在for循环内部执行此操作,并且连接原始向量的次数是不确定的。 - Simon
啊,你在问题中没有提到这一点……(我已经编辑了我的回答) - Richard Inglis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接