3

我正在寻找一种将小写字母、空格和句点的大型字符数组转换为一组整数的快速方法,反之亦然。

通常我会使用 double 和 char 函数,但我想使用一组特殊的整数来表示每个字母(这样 'a' 与 '1' 匹配,'b' 与 '2' 匹配......' z' 与 26 匹配,' ' 与 27 匹配,'.' 与 28 匹配)

我目前的方法是:

text = 'quick brown fox jumps over dirty dog';
alphabet ='abcdefghijklmnopqrstuvwxyz .';

converted_text = double(text);
converted_alphabet = double(alphabet);

numbers = nan(28,1)

for i = 1:28
     numbers(converted_text(i)==converted_alphabet(i)) = i;
end

newtext = nan(size(numbers))

for i = 1:size(numbers,1)
   newtext(numbers==i) = alphabet(i)
end

不幸的是,对于大型数组,这需要相当多的时间,我想知道在 MATLAB 中是否有更快的方法来做到这一点?

4

1 回答 1

6

一个简单的方法是使用ismember()

[~,pos] = ismember(text,alphabet)

或使用通过以下方式执行的隐式转换-

out = text - 'a' + 1;

请注意,空白将有 -64 和句号 -50,这意味着您将需要:

out(out == -64) = 27;
out(out == -50) = 28;

速度考虑:

对于小型数组,如果您乐于使用负索引留下空白和句号,则后一种解决方案会稍微快一些。

对于大型阵列,在我的机器上长 1e4 倍,后一种解决方案比ismember().

回去:

alphabet(out)
于 2013-05-07T20:05:14.810 回答