我现在对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 = 2
和n = 3
的行为相同。基本上,G
实际上是一个n
- by-1500矩阵,我希望获取前n
行并将其用作B
的索引。
我可以使用if语句转换结果n = 1
,但这似乎是不必要的。是否真的没办法让它停止对待我的1-by-n矩阵,好像它是一个列向量?
答案 0 :(得分:4)
使用一个数组进行索引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。