我正在寻找一种快速的方法,将小写字母,空格和句点的大字符数组转换为一组整数,反之亦然.
通常我会使用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中是否有更快的方法可以做到这一点?
一种简单的方法是使用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)