使用矢量化从两个矢量获得特定的矩阵输出

时间:2017-12-06 00:56:56

标签: matlab

我想知道是否有一种使用MATLAB矢量化从两个向量生成特定矩阵的有效方法。

假设向量是

x = [u v]

y = [a1 a2 a3 b1 b2 b3] 

其中u,v,a1,a2,a3,b1,b2,b3是一些实数。

我希望使用这些向量生成的2列矩阵是

M = [u  a1;
     u  a2;
     u  a3;
     v  a1;
     v  a2;
     v  a3;
     u  b1;
     u  b2;
     u  b3;
     v  b1;
     v  b2;
     v  b3] 

一般来说,x的长度可以是任意的,y的长度是3的倍数。这是我现在的代码,但我认为应该有更好的方法(这可能避免使用for循环):

M = [];
Y = reshape(y, 3, []);

for j = 1:size(Y, 2)
    [a, b] = meshgrid(x, Y(:, j));
    L = [a(:) b(:)];
    M = [M; L];
end  

2 个答案:

答案 0 :(得分:2)

使用repmatrepelem的解决方案:

M = [repmat(repelem(x(:),3),numel(y)/3,1) , ...
reshape(repmat(reshape(y,3,[]),numel(x),1),[],1)];

答案 1 :(得分:0)

你在M中有一个非常奇怪的命令。这个命令很重要吗?如果没有,或者如果您愿意稍后修改订单,我有两个解决方案:

1)代码

[a,b] = meshgrid(x,y);
M = [a(:) b(:)]

会给你:

M = [
 u  a1
 u  a2
 u  a3
 u  b1
 u  b2
 u  b3
 v  a1
 v  a2
 v  a3
 v  b1
 v  b2
 v  b3] 

2)代码M = combvec(x, y)'为您提供:

M = [
 u  a1
 v  a1
 u  a2
 v  a2
 u  a3
 v  a3
 u  b1
 v  b1
 u  b2
 v  b2
 u  b3
 v  b3]