我有一系列的话:
x=['ae' ; 'be' ; 'ce' ; 'de' ; 'ee' ; 'fe']
我想提取一组字符。因此假设每个集合有N = 2个单词,我该如何获得看起来像这样的返回值
'ae' 'be'
'be' 'ce'
'ce' 'de'
'de' 'ee'
'ee' 'fe'
因此,如果N = 2,我会返回一个矩阵,其中每一行包含当前和前一个字符对。如果N = 3,我将获得每行的当前和前2个字符。如果可能的话,我想避免循环。
有什么想法吗?
答案 0 :(得分: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'