停止Matlab将1xn矩阵视为列向量

时间:2014-11-14 18:32:40

标签: arrays matlab

我现在对MATLAB非常沮丧。让我来说明问题。我将在这里使用非正式表示法。

我有一个名为B的字符串列单元格。现在,让我们说B = {'A';'B';'C';'D'}

我想要一个矩阵G,它是m-by-n,我希望将G中的数字替换为B的相应元素...例如,我们说G[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语句转换结果n = 1,但这似乎是不必要的。是否真的没办法让它停止对待我的1-by-n矩阵,好像它是一个列向量?

3 个答案:

答案 0 :(得分:4)

根据this post by Loren Shure

  

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

     

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

你是第二种情况,因此你看到的行为。

答案 1 :(得分:1)

要使其正常工作,您需要保持输出的列数与G中的列数相同。要实现同样的目标,你可以做这样的事情 -

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

因此,n = 1:

out = 
    'D'    'C'

n = 2:

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

答案 2 :(得分:0)

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