MATLAB:将字符转换为自定义集合数字和返回的最快方法

Ber*_* U. 3 string matlab

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

通常我会使用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
Run Code Online (Sandbox Code Playgroud)

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

Ole*_*leg 6

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

[~,pos] = ismember(text,alphabet)
Run Code Online (Sandbox Code Playgroud)

或者使用由-以下方式执行的隐式转换:

out = text - 'a' + 1;
Run Code Online (Sandbox Code Playgroud)

请注意,空格将具有-64和完全停止-50,这意味着您将需要:

out(out == -64) = 27;
out(out == -50) = 28;
Run Code Online (Sandbox Code Playgroud)

速度考虑:

对于小型阵列,后者的解决方案稍微快一点,如果您乐意留下空白和完全停止的负指数.

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

回去:

alphabet(out)
Run Code Online (Sandbox Code Playgroud)