0

私はプロジェクトのオイラー問題に取り組んでおり、名前のテキスト ファイルをソートし、アルファベットの位置に基づいて名前の各文字に値を割り当てる必要があります (つまり、'Bob' = 2、15、2)。

ExcelのVLOOKUP関数などを使って問題にアプローチすることを考えていました。アルファベットの文字をアルファベット順に並べた参照列ベクトルを作成したかったのです。参照ベクトル内の各文字の位置がその「値」です。次に、「BOB」などの名前テーブルのエントリを取得し、参照ベクトル内の値 B、O、および B を検索して、それらの位置と各文字の値を出力します。

私の質問: あるマトリックスの値を別のベクトルの値にどのように参照しますか? 皆様、ご協力ありがとうございます。

4

2 に答える 2

1

ここでパフォーマンスが本当に問題にならない限り、私はルックアップ テーブルを気にしません。文字を数字に変換する簡単な方法があります。

各文字列を取得し、 を使用して大文字にしupper、「A」を減算して 1 を追加して、すべての「A」を「1」に、「B」を「2」などに変換します。

s = 'Bob';
num_s = upper(s) - 'A' + 1;

私自身の開発が、文字を調べ、それを別のベクトルのエントリに一致させ、それに対応する値を思い出す方法を学ぶことにまだ興味があります。– user1499689

これは、Matlab で簡単に行うことができます。26 要素のルックアップ テーブルがあるとします。lookup

lookup = zeros(26,1);
% define the lookup table
for i=1:numel(lookup)
  lookup(i) = 2*i - 7;   % some random function
end

ここで、上記の文字から数値への変換を使用します。

s =

Joe

>> lookup( upper(s) - 'A' + 1 )

ans =

    13
    23
     3

ここで重要なのは、Matlab を使用すると、任意の行列に別の行列をインデックス付けできることです: M(A). 行列の要素は、行列Aへのインデックスとして扱われますM。文字列sは char 行列で、これを減算して数値行列に変換します'A'。行lookup(...)は、この変換された行列の要素を使用して、行列にインデックスを付けますlookup

ちなみに、これは割り当てにも使用できます。たとえば、各文字の数を (大文字と小文字を区別せずに) 保持する場合は、次のようにします。

% Initialize counts to zero somewhere at the beginning
counts = zeros(26,1);

... % do your stuff

% let 's' be an alphabetic word (only A-Z and a-z)
s_inds = upper(s) - 'A' + 1;
counts( s_inds ) = counts( s_inds ) + 1;  % increment the counts of all characters in 's'
于 2012-07-03T19:02:22.017 に答える
0

ある種のルックアップテーブルを生成する手段が必要になります。ここにある一般的な例を使用します。アルファベットには26文字あり、大文字と小文字は区別されません。

Basic_lookup = 1:26; % Note: this can be changed up if you want some level of randomness.
% Basic_lookup = randperm(26); % I like this a bit better for randomness sake.  And is just an example of making it random.

これで、これは1から26までの単一行ベクトルになります。必要なのは、値ごとに値を持つ文字列を調べて、ルックアップテーブルから必要な値を呼び出すことだけです。@sfstewmanは、投稿でこれについてある程度詳しく説明しています。あなたはそれから簡単に適応することができます。

于 2012-07-03T19:06:04.623 に答える