【问题标题】:MATLAB: Quickest Way To Convert Characters to A Custom Set Numbers and BackMATLAB:将字符转换为自定义集合数字并返回的最快方法
【发布时间】:2013-05-07 20:00:03
【问题描述】:

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

通常我会使用 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 中是否有更快的方法来做到这一点?

【问题讨论】:

  • 你的意思是对于给定的字符串,你想用数字 1 替换 'a',一直到用 26 替换 'z'?你的字母表之外的字符呢?

标签: string matlab


【解决方案1】:

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

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

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

out = text - 'a' + 1;

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

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

速度考虑:

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

对于big数组,在我的机器上长1e4倍,后一种方案比ismember()快两倍。

返回:

alphabet(out)

【讨论】:

  • 但是,就像现在一样,您不只是看看语句中是否有任何字母元素(实际上是它的位置)吗?
  • @fpe 是的,但这是 OP 想要的,不是吗? "所以 'a' 与 '1' 匹配,'b' 与 '2' 匹配.... 'z' 与 26 匹配,' ' 与 27 匹配,而 '.'匹配 28"
  • 是的,我的错……你的方法完美无瑕:)
  • @OlegKomarov:也许您可以使用isstrprop 来处理标点符号和其他特殊字符。您也可以致电lowerupper
猜你喜欢
  • 2020-01-20
  • 2014-10-21
  • 1970-01-01
  • 2014-06-08
  • 1970-01-01
  • 1970-01-01
  • 2016-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多