【问题标题】:Matlab: Easy way of getting the standard basis vectors?Matlab:获取标准基向量的简单方法?
【发布时间】:2011-01-21 02:50:15
【问题描述】:

看起来这应该很容易,但我不是专家,谷歌也没有帮助。

我想在 Matlab 中以一种优雅的方式为 n 维空间生成标准有序基向量。例如,类似于以下的行为:

>> [e1, e2] = SOB(2);
>> e1

  e1 =    1     0

>> e2

  e2 =    0     1

希望有一个 1-liner,并且真的不想为这么简单的东西编写函数。

谢谢

【问题讨论】:

    标签: matlab linear-algebra


    【解决方案1】:

    为什么不

    A = eye(N); 
    

    那么A(:,i)是你的第i个基向量

    【讨论】:

      【解决方案2】:

      要获得单个基向量,例如N维度中的k-th标准基向量,您可以使用:

      yourbasisvector = double(1:N == k)
      

      1:N 生成向量1 2 ... N== k 按元素测试与k 是否相等; double 将逻辑值转换为数字。

      【讨论】:

      • 这太棒了。几个星期以来,我一直在尝试提出或找到这样的解决方案。您甚至可以通过执行 double(1:N == [k1, k2, k3]') 来扩展此方法,以一次获取多个身份向量。
      【解决方案3】:

      两条线可以吗?使用EYE 创建单位矩阵,使用MAT2CELL 将向量复制到元胞数组中,然后使用DEAL 分发它们。

      tmp = mat2cell(eye(N),N,ones(N,1));
      [e1,e2,...,eN] = deal(tmp{:})
      

      【讨论】:

      • 2 行可以工作......虽然(对我来说)这相当神秘 :)
      • @des4maisons:我进行了一些编辑以澄清。基本上,如果你将基向量组合成一个数组,你就会得到标识。所以我构造了单位矩阵并将其拆开。
      • 是的,我想这就是这样做的方法,我只是不知道怎么做,所以谢谢。另外,您的意思是链接到 mat2cell,还是使用 num2cell?
      • @des4maisons:哎呀,应该是 mat2cell。感谢您指出。
      【解决方案4】:

      如果你是匿名函数,那就更方便了。

      e = @(x) eye(size(A))(:,x);
      

      如果 A 的大小是 6 x 6,则返回 6 x 1 向量。

      e(1) = [1;0;0;0;0;0]
      

      【讨论】:

      • Error: ()-indexing must appear last in an index expression.
      • @User1291 你定义了矩阵A吗?
      • 没关系。如果我对大小进行硬编码(例如eye(5)(:,3)),我已经收到该错误
      猜你喜欢
      • 1970-01-01
      • 2019-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      • 1970-01-01
      • 2015-11-10
      • 1970-01-01
      相关资源
      最近更新 更多