2014-03-13 30 views
1

我有字的數組:提取累積的n-gram Matlab的

x=['ae' ; 'be' ; 'ce' ; 'de' ; 'ee' ; 'fe'] 

我想提取字符集。因此,假設每一組有N = 2分的話,我怎麼能去獲得看起來像這樣

'ae' 'be' 
'be' 'ce' 
'ce' 'de' 
'de' 'ee' 
'ee' 'fe' 

所以返回值,如果N = 2,我回去其中每行都包含對當前和以前的矩陣字符。如果N = 3,我會爲每一行取回當前和前兩個字符。如果可能,我想避免循環。

任何想法?

回答

1

可以使用Circulant Matrix Maltlab提供,截斷它根據需要,並用它作爲一個指標向量:

x = {'ae' ; 'be' ; 'ce' ; 'de' ; 'ee' ; 'fe'} 
N = 3; 

n = numel(x); 

A = gallery('circul',n:-1:1) 
B = fliplr(A(1:n-N+1,n-N+1:end)) 

result = x(B) 

或更短一點:

A = fliplr(gallery('circul',n:-1:1)) 
result = x(A(1:n-N+1,1:n-N)) 

或使用hankel另一種選擇 - 矩陣:

A = hankel(1:n,1:N) 
result = x(A(1:n-N+1,:)) 

給出:

result = 

    'ae' 'be' 'ce' 
    'be' 'ce' 'de' 
    'ce' 'de' 'ee' 
    'de' 'ee' 'fe' 
+0

抱歉花這麼長時間,我完全忘了。 – user1234440