データのより高速なソートアプローチ

バイオブダン

bedファイルをランダムに10000回ソートし、毎回上位1000行を取得する必要があります。現在、次のコードを使用しています。

for i in {1..100}; do
    for j in {1..100}; do
        sort -R myfile.bed_sorted | tail -n 1000 > myfile.bed.$i.$j.bed
    done
done

ファイルごとにこれを行うには、ほぼ6時間かかります。私はそれらのうちの約150を解決する必要があります。これに対するより速い解決策はありますか?

私が持っているデータのサンプル(myfile.bed_sorted):

    chr1    111763899   111766405   peak1424    1000    .   3224.030    -1  -1
    chr1    144533459   144534584   peak1537    998 .   3219.260    -1  -1
    chr8    42149384    42151246    peak30658   998 .   3217.620    -1  -1
    chr2    70369299    70370655    peak16886   996 .   3211.600    -1  -1
    chr8    11348914    11352994    peak30334   990 .   3194.180    -1  -1
    chr21   26828820    26830352    peak19503   988 .   3187.820    -1  -1
    chr16   68789901    68791150    peak11894   988 .   3187.360    -1  -1
    chr6    11458964    11462245    peak26362   983 .   3169.750    -1  -1
    chr1    235113793   235117308   peak2894    982 .   3166.000    -1  -1
    chr6    16419968    16422194    peak26522   979 .   3158.520    -1  -1
    chr6    315344  321339  peak26159   978 .   3156.320    -1  -1
    chr1    111756584   111759633   peak1421    964 .   3110.520    -1  -1
    chrX    12995098    12997685    peak33121   961 .   3100.000    -1  -1
    chr9    37408601    37410262    peak32066   961 .   3100.000    -1  -1
    chr9    132648603   132651523   peak32810   961 .   3100.000    -1  -1
    chr8    146103178   146104943   peak31706   961 .   3100.000    -1  -1
    chr8    135611963   135614649   peak31592   961 .   3100.000    -1  -1
    chr8    128312253   128315935   peak31469   961 .   3100.000    -1  -1
    chr8    128221486   128223644   peak31465   961 .   3100.000    -1  -1
    chr8    101510621   101514237   peak31185   961 .   3100.000    -1  -1
    chr8    101504210   101508005   peak31184   961 .   3100.000    -1  -1
    chr7    8173062 8174642 peak28743   961 .   3100.000    -1  -1
    chr7    5563424 5570618 peak28669   961 .   3100.000    -1  -1
    chr7    55600455    55603724    peak29192   961 .   3100.000    -1  -1
    chr7    35767878    35770820    peak28976   961 .   3100.000    -1  -1
    chr7    28518260    28519837    peak28923   961 .   3100.000    -1  -1
    chr7    104652502   104654747   peak29684   961 .   3100.000    -1  -1
    chr6    6586316 6590136 peak26279   961 .   3100.000    -1  -1
    chr6    52362185    52364270    peak27366   961 .   3100.000    -1  -1
    chr6    407805  413348  peak26180   961 .   3100.000    -1  -1
    chr6    32936987    32941352    peak26978   961 .   3100.000    -1  -1
    chr6    226477  229964  peak26144   961 .   3100.000    -1  -1
    chr6    157017923   157020836   peak28371   961 .   3100.000    -1  -1
    chr6    137422769   137425128   peak28064   961 .   3100.000    -1  -1
    chr5    149789084   149793727   peak25705   961 .   3100.000    -1  -1
    chr5    149778033   149783125   peak25702   961 .   3100.000    -1  -1
    chr5    149183766   149185906   peak25695   961 .   3100.000    -1  -1
メンドン

ファイルを丸呑みするのに十分なメモリがあると仮定して、試してみることができます

perl -e 'use List::Util 'shuffle'; @k=shuffle(<>); print @k[0..999]' file.bed

これを10000回実行したいので、繰り返しをスクリプトに統合し、配列自体ではなくインデックスシャッフルして、処理を高速化することをお勧めします。

$ time perl -e 'use List::Util 'shuffle'; 
            @l=<>; for $i (1..10000){
               open(my $fh, ">","file.$i.bed"); 
               @r=shuffle(0..$#l); 
               print $fh @l[@r[0..999]]
            }' file.bed

real    1m12.444s
user    1m8.536s
sys     0m3.244s

上記は、37000行を含むファイルからそれぞれ1000行の10000ファイルを作成しました(サンプルファイルは1000回繰り返されました)。ご覧のとおり、私のシステムでは3分強かかりました。

説明

  • use List::Util 'shuffle';:これはshuffle()、配列をランダム化する関数を提供するPerlモジュールをインポートします
  • @l=<>;:入力ファイル(<>)を配列にロードします@l
  • for $i (1..10000){} :これを10000回実行します。
  • @r=shuffle(0..$#l); $#lはの要素数である@lため@r、配列@l(入力ファイルの行)のインデックス番号のランダム化されたリストになります
  • open(my $fh, ">","file.$i.bed"); file.$i.bed書き込みを要求されたファイルを開きます$i1から10000までの値を取ります。
  • print $fh @l[@r[0..999]]:シャッフルされた配列の最初の1000個のインデックスを取得し、対応する行(の要素@l)を出力します。

別のアプローチは使用することですshuf@frostschutzに感謝します):

$ time for i in {1..10000}; do shuf -n 1000 file.bed > file.$i.abed; done

real    1m9.743s
user    0m23.732s
sys     0m31.764s

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

パンダデータフレームより高速なアプローチ

分類Dev

3と5の倍数へのより高速なアプローチ

分類Dev

リアルタイムオーディオ信号のより高速なプロット

分類Dev

go / appengine:より高速なデータストアテスト

分類Dev

シリアルデータを継続的に読み取り、解析するための高速アプローチ

分類Dev

プロデューサー/コンシューマーキューパターンでのより高速なプロデューサー

分類Dev

行のすべての要素を行の最大値で分割する-より高速なアプローチ

分類Dev

より小さなデータセットを使用した外れ値検出アプローチ

分類Dev

クイックソートとマージソートのベンチマークにより、マージソートがより高速になる

分類Dev

Androidのデータベースとのより高速な接続

分類Dev

より高速な列-データフレームでの乗算

分類Dev

膨大なデータセットをVLOOKUPするためのより高速な方法

分類Dev

大きなXMLファイルからデータをより高速に抽出するためのマルチスレッドPowerShellスクリプト

分類Dev

ローソク足HighChartツールチップにより多くのデータを埋め込む方法は?

分類Dev

より高速なrcnnテンソルフローでアスペクト比を維持するパラメーターは何ですか?

分類Dev

より高速なcontains()操作のためのデータ構造?

分類Dev

より高速なcontains()操作のためのデータ構造?

分類Dev

そのような割り当てにアプローチする方法:Spring Project、H2データベース、単純なモデル(文字列名、BigDecimal価格)

分類Dev

node.jsアプリケーションのより高速なテスト?

分類Dev

forループのより高速な代替

分類Dev

どのデータ構造が挿入によってソートされ、高速の「含む」チェックがありますか?

分類Dev

Vue2.X-コンポーネント内の対照的な非同期データソースを待つための優れたアプローチ

分類Dev

C ++ 17より前のテンプレートパラメータパックの「折りたたみ」:慣用的なアプローチ

分類Dev

MongoDBカーソルからパンダデータフレームにデータをロードするより高速な方法

分類Dev

さまざまな言語の文字列を含む配列をソートするためのより良いアプローチはありますか

分類Dev

サードパーティのWebサイトでデータを検索するためのC#でのより良いアプローチ

分類Dev

スタック内よりもヒープ内のデータへのアクセスが高速ですか?

分類Dev

最新のx86システムでは、スタックフロートアレイ操作はヒープフロート操作よりも高速ですか?

分類Dev

ダミーコーディングを作成するためのより効率的なアプローチ

Related 関連記事

  1. 1

    パンダデータフレームより高速なアプローチ

  2. 2

    3と5の倍数へのより高速なアプローチ

  3. 3

    リアルタイムオーディオ信号のより高速なプロット

  4. 4

    go / appengine:より高速なデータストアテスト

  5. 5

    シリアルデータを継続的に読み取り、解析するための高速アプローチ

  6. 6

    プロデューサー/コンシューマーキューパターンでのより高速なプロデューサー

  7. 7

    行のすべての要素を行の最大値で分割する-より高速なアプローチ

  8. 8

    より小さなデータセットを使用した外れ値検出アプローチ

  9. 9

    クイックソートとマージソートのベンチマークにより、マージソートがより高速になる

  10. 10

    Androidのデータベースとのより高速な接続

  11. 11

    より高速な列-データフレームでの乗算

  12. 12

    膨大なデータセットをVLOOKUPするためのより高速な方法

  13. 13

    大きなXMLファイルからデータをより高速に抽出するためのマルチスレッドPowerShellスクリプト

  14. 14

    ローソク足HighChartツールチップにより多くのデータを埋め込む方法は?

  15. 15

    より高速なrcnnテンソルフローでアスペクト比を維持するパラメーターは何ですか?

  16. 16

    より高速なcontains()操作のためのデータ構造?

  17. 17

    より高速なcontains()操作のためのデータ構造?

  18. 18

    そのような割り当てにアプローチする方法:Spring Project、H2データベース、単純なモデル(文字列名、BigDecimal価格)

  19. 19

    node.jsアプリケーションのより高速なテスト?

  20. 20

    forループのより高速な代替

  21. 21

    どのデータ構造が挿入によってソートされ、高速の「含む」チェックがありますか?

  22. 22

    Vue2.X-コンポーネント内の対照的な非同期データソースを待つための優れたアプローチ

  23. 23

    C ++ 17より前のテンプレートパラメータパックの「折りたたみ」:慣用的なアプローチ

  24. 24

    MongoDBカーソルからパンダデータフレームにデータをロードするより高速な方法

  25. 25

    さまざまな言語の文字列を含む配列をソートするためのより良いアプローチはありますか

  26. 26

    サードパーティのWebサイトでデータを検索するためのC#でのより良いアプローチ

  27. 27

    スタック内よりもヒープ内のデータへのアクセスが高速ですか?

  28. 28

    最新のx86システムでは、スタックフロートアレイ操作はヒープフロート操作よりも高速ですか?

  29. 29

    ダミーコーディングを作成するためのより効率的なアプローチ

ホットタグ

アーカイブ