3

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 でこれを行うためのより迅速な方法があるかどうか疑問に思っています。

4

1 に答える 1

6

簡単な方法は、次を使用することismember()です。

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

または、によって実行される暗黙の変換を使用します-

out = text - 'a' + 1;

空白には -64 とピリオド -50 があることに注意してください。つまり、次のものが必要になります。

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

速度に関する考慮事項:

小さいサイズの配列の場合、負のインデックスで空白とピリオドを残しても構わない場合は、後者のソリューションの方がわずかに高速です。

大きな配列の場合、私のマシンでは 1e4 倍長く、後者のソリューションは よりも 2 倍高速ですismember()

戻る:

alphabet(out)
于 2013-05-07T20:05:14.810 に答える