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

String MATLAB:将字符转换为自定义数字集并返回的最快方法,string,matlab,String,Matlab,我正在寻找一种快速的方法,在MATLAB中将小写字母、空格和句点组成的大字符数组转换为一组整数,反之亦然 通常我会使用double和char函数,但我想使用一组特殊的整数来表示每个字母(这样“a”与“1”匹配,“b”与“2”匹配,…“z”与26匹配,“与27匹配,.”与28匹配) 我目前的方法是: text = 'quick brown fox jumps over dirty dog'; alphabet ='abcdefghijklmnopqrstuvwxyz .'; converted_

我正在寻找一种快速的方法,在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

不幸的是,对于大型阵列,这需要花费相当多的时间,我想知道在MATLAB中是否有更快的方法来实现这一点?

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

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

out = text - 'a' + 1;
请注意,空格将有-64和句号-50,这意味着您需要:

out(out == -64) = 27;
out(out == -50) = 28;
速度注意事项: 对于小型阵列,如果您愿意将负索引留空和句号,则后一种解决方案会稍微快一点

对于big阵列,在我的机器上,后一种解决方案的速度是
ismember()
的两倍

往回看:
但是,就像现在一样,你不只是看看语句中是否有任何字母元素(实际上是它的位置)?@fpe是的,但这是OP想要的,不是吗?“因此,‘a’匹配‘1’,‘b’匹配‘2’,‘z’匹配‘26’,‘27’匹配,‘28’匹配”是的,我的错……你的方法是完美的:)@OlegKomarov:也许你可以使用
isstrprop
来处理标点符号和其他特殊字符。另外,您可能需要调用
lower
upper
您的意思是,对于给定的字符串,您希望将“a”替换为数字1,直到将“z”替换为26?字母表以外的字符呢?
out(out == -64) = 27;
out(out == -50) = 28;
alphabet(out)