【问题标题】:In matlab, generating a matrix by adding the elements of two orthogonal vectors在matlab中,通过将两个正交向量的元素相加来生成一个矩阵
【发布时间】:2014-06-25 03:10:50
【问题描述】:

假设我有两个向量: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]在哪里?

提前致谢。

【问题讨论】:

    标签: matlab matrix orthogonal


    【解决方案1】:

    这是 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
    

    【讨论】:

    • +1 请注意,如果向量是复数,' 会改变结果(复共轭)
    • @LuisMendo 是的!在这种情况下,我必须使用.,因为 OP 有符号 - x0y0,所以千万不要冒险 :) 谢谢!
    【解决方案2】:

    试试这个

    Z = repmat(X,numel(Y),1) + repmat(Y',1,numel(X));
    

    【讨论】:

      【解决方案3】:

      你也可以使用ndgrid:

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

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

      Z = log(kron(exp(X),exp(Y).'));
      

      【讨论】:

      • 我想也可以使用meshgrid,不是吗? +1
      • @Divakar 是的...但是在我看到@chappjc 的good advice 之后,我养成了总是使用ndgrid 的习惯
      【解决方案4】:

      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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-27
        • 2022-01-06
        相关资源
        最近更新 更多