Rのループのパフォーマンスの問題

rohit

2つの行列AとBがあります。どちらにも名前のリストが含まれています。質問は類似度に基づいています。B(行列全体)からAの要素の最小距離を見つけます。ハミング距離が3より大きい場合、次に、データは行列Bに追加されます。それ以外の場合は追加されません。例を挙げましょう

 A<-c("cvombiflam","combiflam")
 A<-as.matrix(A)

 B<-c("windfall","computer","baseball")
 B<-as.matrix(B)

ここで、A1はBを検索し、ハミング距離に関してBの最も近いメンバーを見つけます。最も近いのはB2です。B [2]で距離を求めます。最も近い距離が3より大きいため、cvomiflamがBに追加されます。Bは次のようになります。

 B<-c("windfall",
      "computer",
      "baseball",
      "cvombiflam")

これで、A( "combiflam")の2番目の要素がBを検索します。最も近いのは距離が1のB(cvombiflam)の4番目の要素です。したがってcombiflamはBに追加されません。最後のBリストを更新したいです。

私が書いたコードは次のとおりです。

 for(i in 1:length(A))
 {    
      d<-min(stringdistmatrix(A[i],B)
      if(d>3)
      {            
           B<-rbind(B,A[i])
      }
 }   

これで、Aマトリックスが約140,000、Bマトリックスが200,000になりました。コードは正常に機能していますが、実行には時間がかかります。もっと速い方法を教えてください。

川の部分

Bコストがかかり、メモリスペースが断片化する可能性がある、何度も成長する代わりに、のベクトルを格納および更新するか、の要素を追加する必要があるかどうTRUEかをFALSE示すことができます。次に、最後にのみ、これらの選択した要素をに追加しますABB

注意すべきもう1つの点は、ベクトルのみが必要な場合は、どこでも行列を使用していることです。私はあなたのためにそれを修正しました。

A <- as.vector(A)
B <- as.vector(B)

add.A <- rep(FALSE, length(A))

for(i in 1:length(A)) {
  if (i %% 1000L == 0L) cat(sprintf("%.2f percent completed", 100 * i / length(A)))
  d.B <- stringdist(A[i], B)
  d.A <- stringdist(A[i], A[add.A])
  d <- min(c(d.B, d.A))
  if (d > 3) {            
    add.A[i] <- TRUE
  }
}

B <- c(B, A[add.A])

その問題に対処しても、問題の次元はまだ巨大です。多くの距離(少なくともlength(A) * length(B))が計算される必要があり、これには多くの時間がかかります。catループ内にを追加して、実行にかかる時間を把握できるようにしました。試してみて、どれだけ遅いか速いかについてコメントしてください。

また、共通の項目がある場合はA、次のBようにすることで、最初に問題の次元を減らすことができます。

A <- unique(A)
B <- unique(B)
A <- setdiff(A, B)

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

Rグループ化データのパフォーマンスの問題

分類Dev

ループ内のjQueryパフォーマンスの問題

分類Dev

パフォーマンスの問題

分類Dev

カーソルのパフォーマンス低下の問題

分類Dev

whileループでのphpパフォーマンスの問題

分類Dev

アプリのパフォーマンスの問題

分類Dev

ベクトルのパフォーマンスの問題

分類Dev

マルチプロセッシングのプール方式のパフォーマンスの問題

分類Dev

ループパフォーマンスの問題に対するパンダのリサンプリング

分類Dev

メンバーの最小日付のループ-パフォーマンスの問題

分類Dev

EntityFrameworkでのテーブル結合のパフォーマンスの問題

分類Dev

forループのマットメニュー:パフォーマンスの問題

分類Dev

WCFコンソールアプリケーションのパフォーマンスの問題

分類Dev

UITableViewのスクロールパフォーマンスの問題iOS7

分類Dev

Javaのメモリ使用量/スレッドプールのパフォーマンスの問題

分類Dev

大きなテーブルでループを使用したPythonのパフォーマンスの問題

分類Dev

春の起動時のパフォーマンスの問題

分類Dev

matplotlibの凡例のパフォーマンスの問題

分類Dev

PageStorageKeyでのFlutterListViewのパフォーマンスの問題

分類Dev

VirtualBoxでのLinuxMintのパフォーマンスの問題

分類Dev

Burrows-PythonのWheelerのパフォーマンスの問題

分類Dev

Djangoの多対多のパフォーマンスの問題

分類Dev

SQLでのUNION句のパフォーマンスの問題

分類Dev

Where andContainsでのLINQtoEntitiesのパフォーマンスの問題

分類Dev

HikariCP での Postgresql のパフォーマンスの問題

分類Dev

SSESIMDコードのパフォーマンスの問題

分類Dev

AMDAPUでのゲームプレイ/ openGLパフォーマンスの問題

分類Dev

openMpを使用した複数の独立したforループのパフォーマンスの問題

分類Dev

数独ソルバーのパフォーマンスの問題

Related 関連記事

  1. 1

    Rグループ化データのパフォーマンスの問題

  2. 2

    ループ内のjQueryパフォーマンスの問題

  3. 3

    パフォーマンスの問題

  4. 4

    カーソルのパフォーマンス低下の問題

  5. 5

    whileループでのphpパフォーマンスの問題

  6. 6

    アプリのパフォーマンスの問題

  7. 7

    ベクトルのパフォーマンスの問題

  8. 8

    マルチプロセッシングのプール方式のパフォーマンスの問題

  9. 9

    ループパフォーマンスの問題に対するパンダのリサンプリング

  10. 10

    メンバーの最小日付のループ-パフォーマンスの問題

  11. 11

    EntityFrameworkでのテーブル結合のパフォーマンスの問題

  12. 12

    forループのマットメニュー:パフォーマンスの問題

  13. 13

    WCFコンソールアプリケーションのパフォーマンスの問題

  14. 14

    UITableViewのスクロールパフォーマンスの問題iOS7

  15. 15

    Javaのメモリ使用量/スレッドプールのパフォーマンスの問題

  16. 16

    大きなテーブルでループを使用したPythonのパフォーマンスの問題

  17. 17

    春の起動時のパフォーマンスの問題

  18. 18

    matplotlibの凡例のパフォーマンスの問題

  19. 19

    PageStorageKeyでのFlutterListViewのパフォーマンスの問題

  20. 20

    VirtualBoxでのLinuxMintのパフォーマンスの問題

  21. 21

    Burrows-PythonのWheelerのパフォーマンスの問題

  22. 22

    Djangoの多対多のパフォーマンスの問題

  23. 23

    SQLでのUNION句のパフォーマンスの問題

  24. 24

    Where andContainsでのLINQtoEntitiesのパフォーマンスの問題

  25. 25

    HikariCP での Postgresql のパフォーマンスの問題

  26. 26

    SSESIMDコードのパフォーマンスの問題

  27. 27

    AMDAPUでのゲームプレイ/ openGLパフォーマンスの問題

  28. 28

    openMpを使用した複数の独立したforループのパフォーマンスの問題

  29. 29

    数独ソルバーのパフォーマンスの問題

ホットタグ

アーカイブ