【问题标题】:Stop Matlab from treating a 1xn matrix as a column vector阻止 Matlab 将 1xn 矩阵视为列向量
【发布时间】:2014-11-14 18:32:40
【问题描述】:

我现在对 MATLAB 感到非常沮丧。让我来说明问题。我将在这里使用非正式的符号。

我有一个名为B 的字符串的列单元格向量。现在,假设为B = {'A';'B';'C';'D'}

我想要一个矩阵G,它是m×n,我想用B的各个元素替换G中的数字...例如,假设@987654326 @是[4 3; 2 1]

假设我有一个变量n,它表示我想取出多少行G

当我做B(G(1:2,:)) 时,我得到了我想要的['D' 'C'; 'B' 'A']

但是,如果我执行B(G(1:1,:)),我会得到['D';'C'],而我真正想要得到的是['D' 'C']

我正在使用1:n,我希望它对n = 1 具有与n = 2n = 3 相同的行为。基本上,G 实际上是一个n-by-1500 矩阵,我想取顶部的n 行并将其用作B 的索引。

我可以使用 if 语句来转换结果 if n = 1 但这似乎没有必要。真的没有办法让它停止将我的 1×n 矩阵视为列向量吗?

【问题讨论】:

    标签: arrays matlab


    【解决方案1】:

    根据this post by Loren Shure

    使用一个数组 C = A(B) 进行索引会产生 B 大小的输出,除非 A 和 B 都是向量。

    当A和B都是向量时,C中的元素个数就是B中元素个数,方向为A。

    您处于第二种情况,因此您看到的行为。

    【讨论】:

      【解决方案2】:

      要使其正常工作,您需要保持输出具有与G 中一样多的列。为了达到同样的效果,你可以这样做 -

      out = reshape(B(G(1:n,:)),[],size(G,2))
      

      因此,n = 1:

      out = 
          'D'    'C'
      

      当 n = 2:

      out = 
          'D'    'C'
          'B'    'A'
      

      【讨论】:

        【解决方案3】:

        我认为这只会在一维情况下发生。默认情况下,matlab 将返回列向量,因为它是存储矩阵的方式。如果你想要一个行向量,你可以使用转置。在我看来,当 n > 1 时应该没问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-12-28
          • 1970-01-01
          • 1970-01-01
          • 2021-12-04
          • 1970-01-01
          • 2012-06-22
          • 2015-01-12
          • 1970-01-01
          相关资源
          最近更新 更多