2015-02-11 43 views
1

這是MatLab的問題... 我有兩個矩陣,一個是(5×1雙):掩蔽雙重的過一個字符串

1 
2 
3 
1 
3 

而第二矩陣是一個(5× 3字符串),用空格其中沒有字符出現:

a 
bc 
def 
g 
hij 

我試圖得到一個輸出,使得(5×1串)被創建,並從基質2,其中n的每一行輸出的第n個值是矩陣1中的值。我不確定如何使用能夠處理更大的矩陣的面罩來做到這一點。我的目標矩陣將具有以下內容:

a 
c 
f 
g 
j 

非常感謝您的幫助!

+2

矩陣在哪裏?你使用什麼平臺/語言? – 2015-02-11 19:46:46

+1

MatLab,對不起忘了補充一點! – 2015-02-11 20:44:58

回答

0

有很多方法可以完成此任務。我會給你兩個。

方法#1 - 生成線性指標和訪問元素

使用sub2ind以生成一組對應於要在矩陣訪問的行和列的位置的線性指標。你會注意到列的位置是變化的,但是你想要訪問每一行的行位置總是增加1。因此,給你的字符串矩陣A,和你的專欄要訪問存儲在ind,只是這樣做:

A = ['a '; 'bc '; 'def'; 'g ';'hij']; 
ind = [1 2 3 1 3]; 
out = A(sub2ind(size(A), (1:numel(ind)).', ind(:))) 

out = 

a 
c 
f 
g 
j 

方法#2 - 創建一個稀疏矩陣,轉換爲logical和訪問

或者,您可以通過sparse創建一個稀疏矩陣,其中非零項是行,從1到最多與ind中的元素相同,並且各列與您給我們的內容不同。

S = sparse((1:numel(ind)).',ind(:),true,size(A,1),size(A,2)); 
A = A.'; out = A(S.'); 

請注意您試圖以行爲主要方式訪問每個元素,但MATLAB會以列主要格式執行此操作。因此,我們需要轉置我們的數據矩陣,並且也需要我們的稀疏矩陣並轉置。最終結果應該給你方法#1相同的順序。

+0

感謝您的建議!我試着實現方法#1,因爲它對我來說更有意義,但是我得到一個新的錯誤'超範圍下標'。任何線索,爲什麼這可能會發生? – 2015-02-11 21:17:15

+0

@TBMatLab - 你說你的矩陣在每個角色之間都有空格。當我以這種方式創建矩陣時,我設法得到了正確的結果。讓我更新我的答案。 – rayryeng 2015-02-11 21:18:00

+0

@TBMatLab - 好的,看看我是如何創建矩陣的。這與你創建你的方式相同嗎? – rayryeng 2015-02-11 21:20:09