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 = 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():

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

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

out = text - 'a' + 1;

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

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

速度注意事项:

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

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

返回:

alphabet(out)

关于string - MATLAB:将字符转换为自定义设置数字并返回的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16427510/

相关文章:

string - 如何将两个字符串转换为 perl 中的散列?

algorithm - 张素恩细化算法是如何实现图像细化的?

sql - 甲骨文 : String Concatenation is too long

java - 多次运行Java程序时如何防止打开新的MATLAB实例

matlab - 如何在 matlab 中终止正在运行的进程?

c++ - OpenCV 读取图像并使用整数值管理它们的像素(如 matlab)

matlab - 如何对包含分组数据的矩阵进行行排序

c++ - 为什么从字符串常量到 'char*' 的转换在 C 中有效但在 C++ 中无效

c++ - 谁能检查这个 Palindrome c++ 代码是否正确?

c - 使用函数 getopt 得到除数的个数