1

假设我有两个向量:X=[x0,x1,x2]; Y=[y0,y1]; 在 Matlab 中是否存在一个可以生成 2x3 矩阵 Z=f(X,Y) 的命令,在哪里Z=[x0+y0, x1+y0, x2+y0; x0+y1, x1+y1, x2+y1]

提前致谢。

4

4 回答 4

3

bsxfun这是[ C = bsxfun(fun,A,B) 将函数句柄 fun 指定的逐元素二元运算应用于数组 A 和 B的完美案例,并启用了单例扩展。在这种情况下,@plus 是所需的函数句柄。] -

Z = bsxfun(@plus,X,Y.')

举个例子,看看这个——

X=[2,3,5]
Y=[1,4]
Z = bsxfun(@plus,X,Y.')

这给出了输出 -

X =
     2     3     5
Y =
     1     4
Z =
     3     4     6
     6     7     9
于 2014-06-25T04:02:15.037 回答
1

试试这个

Z = repmat(X,numel(Y),1) + repmat(Y',1,numel(X));
于 2014-06-25T03:22:08.683 回答
1

您还可以使用ndgrid

[xx yy] = ndgrid(Y,X);
Z = xx+yy;

并且有可能滥用kron如下(但请注意,内部kron基本上使用 的变体ndgrid):

Z = log(kron(exp(X),exp(Y).'));
于 2014-06-25T09:18:24.730 回答
0

Nishant anwser 的替代方法是使用kron

   %for example
   X=[1,2,3]; Y=[1,2]
   Z = kron(X, ones(numel(Y), 1)) +  kron(ones(1, numel(X)), Y'); 

Z =

     2     3     4
     3     4     5

如果这适合您,您可以定义一个函数:

% skron for sum kron
skron = @(X,Y) kron(X, ones(numel(Y), 1)) +  kron(ones(1, numel(X)), Y');

Z = skron(X,Y);
于 2014-06-25T03:33:56.810 回答