1

以下のようなファイルがほとんどなく、画像に示されているように数値プロファイリングを実行しようとしています

ミューメリックプロファイリング方法論

 >File Sample
 attttttttttttttacgatgccgggggatgcggggaaatttccctctctctctcttcttctcgcgcgcg
 aaaaaaaaaaaaaaagcgcggcggcgcggasasasasasasaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

サイズ2の各サブストリングをマップしてから、さまざまなptopertiesの33の値にマップしてから、ウィンドウサイズ5に従って追加する必要があります。

    my  %temp = (
                 aCount => {
                        aa =>2
                 }
                 cCount => {
                        aa => 0
                 }
    );

私の現在の実装には、以下のようなものが含まれます、

   while (<FILE>) {
     my $line = $_;
     chomp $line;

     while ($line=~/(.{2})/og) {
        $subStr = $1;
        if (exists $temp{aCount}{$subStr}) {

          push @{$temp{aCount_array}},$temp{aCount}{$subStr};

          if (scalar(@{$temp{aCount_array}}) == $WINDOW_SIZE) {

                my $sum = eval (join('+',@{$temp{aCount_array}}));
                shift @{$temp{aCount_array}};
                #Similar approach has been taken to other 33 rules
          }

        }

        if (exists $temp{cCount}{$subStr}) {
             #similar approach 
        }

        $line =~s/.{1}//og;
     }
   }

プロセス全体の速度を上げるための他のアプローチはありますか

4

1 に答える 1

0

正規表現は素晴らしいですが、必要なのが固定幅の部分文字列だけの場合は、やり過ぎになる可能性があります。代替案はsubstr

$len = length($line);
for ($i=0; $i<$len; $i+=2) {
   $subStr = substr($line,$i,2);
   ...
}

またunpack

foreach $subStr (unpack "(A2)*", $line) {
   ...
}

これらのどちらかが正規表現よりどれだけ速くなるかはわかりませんが、どのようにして見つけることができるかはわかります

于 2013-02-06T16:17:33.650 に答える