我想知道是否有一种使用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
答案 0 :(得分:2)
使用repmat
和repelem
的解决方案:
M = [repmat(repelem(x(:),3),numel(y)/3,1) , ...
reshape(repmat(reshape(y,3,[]),numel(x),1),[],1)];
答案 1 :(得分:0)
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]