String MATLAB:将字符转换为自定义数字集并返回的最快方法
我正在寻找一种快速的方法,在MATLAB中将小写字母、空格和句点组成的大字符数组转换为一组整数,反之亦然 通常我会使用double和char函数,但我想使用一组特殊的整数来表示每个字母(这样“a”与“1”匹配,“b”与“2”匹配,…“z”与26匹配,“与27匹配,.”与28匹配) 我目前的方法是: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_
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)