2014-11-14 26 views
3

我現在對MATLAB非常沮喪。讓我來說明這個問題。我將在這裏使用非正式的符號。停止Matlab將1xn矩陣當作列向量處理

我有一個字符串的列單元格向量B。現在,我們假設B = {'A';'B';'C';'D'}

我想有一個矩陣G,這爲m乘n,我想在GB各要素...例如更換號碼,讓我們說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 1500矩陣,我想取頂部n行,並將其用作B的索引。

我可以使用if語句來轉置結果,如果n = 1但似乎是多餘的。是否真的沒有辦法讓它停止處理我的1乘n矩陣,就好像它是列向量一樣?

回答

0

我認爲這隻會發生在一維情況。默認情況下,matlab將返回列向量,因爲它是如何存儲矩陣的方式。如果你想要一個行向量,你可以使用轉置。那麼在我看來應該是細當n> 1

4

根據this post by Loren Shure

索引與一個陣列C = A(B)產生輸出B的大小,除非A和B兩者都是矢量。

當A和B都是矢量,在C元素的數量是您在第二種情況下在B和與A

的定向元件的數量,因此你看到的行爲。

1

要使其工作,您需要保持輸出具有與G中一樣多的列。爲了達到同樣的,你可以做這樣的事情 -

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

因此,當n = 1:

out = 
    'D' 'C' 

當n = 2:

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