これを書くためのより短く/エレガント/効率的な方法はありますか?

zexot

このRコードは機能しますが、forループは長すぎて見苦しく、Rではforループの使用は推奨されないことを読みました。

私がやりたいのは、さまざまな長さのベクトルをベクトルのリストHaarData @Wから行列MyMatrixの行にコピーすることです。

ベクトルの長さは行列の列数よりも短いため、値を複製して行を埋めたいと思います。

ベクターは、長さ2持っZ Z∈ℤ、およびマトリックス行の長さが必要であるため、Nそのような2 Z ≤nは

library(wavelets)


Data <- seq(1, 16)

n <- as.integer(log2(length(Data)))
#Data <- seq(1, 2 ^ n, 1)
HaarData <- dwt(Data, filter = "haar")


#Square matrix to write data
MyMatrix <- matrix(, nrow = n, ncol = 2 ^ n)


row <- 0 #row counter
for (vector in HaarData@W) {
    row <- row + 1
    duplication <- (2 ^ n) / length(vector)
    newRow <- c(rep(vector, each = duplication))
    MyMatrix[row,] <- newRow
}
プラメンペトロフ

そもそもなぜ操作をしたいのかわかりませんが、それでも私のアプローチは次のとおりです。

library(wavelets)
library(microbenchmark)

Data <- seq(1, 32)
n <- as.integer(log2(length(Data)))

HaarData <- dwt(as.numeric(Data), filter = "haar")

# Abstract operation in the loop in a function, no side effects
duplicate_coefs <- function(filter_coefs, n){
  rep(filter_coefs, each = `^`(2, n - as.integer(log2(length(filter_coefs))) ))
}


microbenchmark(
  old = {
    #Square matrix to write data
    MyMatrix <- matrix(, nrow = n, ncol = 2 ^ n)


    row <- 0 #row counter
    for (vector in HaarData@W) {
      row <- row + 1
      duplication <- (2 ^ n) / length(vector)
      newRow <- c(rep(vector, each = duplication))
      MyMatrix[row,] <- newRow
    }
  }
  ,
  new = {
     n_len <- length(HaarData@W)
     new_result <- matrix(unlist( lapply(HaarData@W, duplicate_coefs, n_len) )
            , nrow = n_len
            , byrow = TRUE)

)

identical(MyMatrix, new_result)

私のマシンでは、約50倍のスピードアップが得られます

Unit: microseconds
 expr      min        lq       mean    median        uq      max neval
  old 2891.967 2940.0550 3203.14740 2982.5360 3110.3985 6472.223   100
  new   48.519   50.8065   59.04673   56.4805   60.8905  302.845   100

お役に立てれば

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

これらの条件を書くためのよりエレガントな方法はありますか?

分類Dev

このコードを書くためのよりエレガントで効率的な方法です

分類Dev

このSQLクエリを書くためのより効率的な方法はありますか?

分類Dev

このクエリを書くためのより効率的な方法はありますか?

分類Dev

これを書くためのよりコンパクトでエレガントな方法はありますか?

分類Dev

このLCM関数を書くためのよりクリーンでエレガントなHaskellの方法はありますか?

分類Dev

この「if」リストをよりエレガントな方法で書く方法はありますか?

分類Dev

この掛け算の九九を書くためのより効率的な方法はありますか?

分類Dev

Kotlinでこのゲッターを書くためのよりエレガントな方法はありますか?

分類Dev

これを書くためのより効率的な方法は何ですか?

分類Dev

このSQLを書くためのより効率的な方法はありますか?

分類Dev

このコードを書くためのより効率的な方法はありますか?

分類Dev

これを書くためのより効率的な方法は?

分類Dev

PythonのCurrencyConverter。エラー「金額」が定義されていません、なぜですか?。また、このコードを書くためのより短いまたはよりコンパクトな方法はありますか?

分類Dev

これを書くためのよりエレガントな方法は?(トランプのデッキ)

分類Dev

これを書くためのより明確な方法はありますか?

分類Dev

これを行うためのより単純、効率的、またはより短い方法はありますか?

分類Dev

FontAwesomeアイコンを含むこの関数を書くためのより効率的な方法はありますか?

分類Dev

この短いスクリプトを書くためのより良い方法はありますか?

分類Dev

Python辞書を保存するためのより速く効率的な方法はありますか?

分類Dev

合体関数を書くためのより効率的な方法はありますか?

分類Dev

これを書くためのよりクリーンな方法はありますか?(数字から文字列)

分類Dev

これらのifステートメントを書くためのより良い方法はありますか

分類Dev

Swift:この配列マッピングを書くためのよりエレガントな方法は?

分類Dev

このコードを書くためのより短い方法はありますか?

分類Dev

このコードをより短く、より効率的にする方法はありますか?

分類Dev

これをコーディングするためのより効率的な方法はありますか?

分類Dev

このコードをPythonで書く効率的な方法はありますか?

分類Dev

この単純なスニペットを書くためのより簡潔な方法はありますか?

Related 関連記事

  1. 1

    これらの条件を書くためのよりエレガントな方法はありますか?

  2. 2

    このコードを書くためのよりエレガントで効率的な方法です

  3. 3

    このSQLクエリを書くためのより効率的な方法はありますか?

  4. 4

    このクエリを書くためのより効率的な方法はありますか?

  5. 5

    これを書くためのよりコンパクトでエレガントな方法はありますか?

  6. 6

    このLCM関数を書くためのよりクリーンでエレガントなHaskellの方法はありますか?

  7. 7

    この「if」リストをよりエレガントな方法で書く方法はありますか?

  8. 8

    この掛け算の九九を書くためのより効率的な方法はありますか?

  9. 9

    Kotlinでこのゲッターを書くためのよりエレガントな方法はありますか?

  10. 10

    これを書くためのより効率的な方法は何ですか?

  11. 11

    このSQLを書くためのより効率的な方法はありますか?

  12. 12

    このコードを書くためのより効率的な方法はありますか?

  13. 13

    これを書くためのより効率的な方法は?

  14. 14

    PythonのCurrencyConverter。エラー「金額」が定義されていません、なぜですか?。また、このコードを書くためのより短いまたはよりコンパクトな方法はありますか?

  15. 15

    これを書くためのよりエレガントな方法は?(トランプのデッキ)

  16. 16

    これを書くためのより明確な方法はありますか?

  17. 17

    これを行うためのより単純、効率的、またはより短い方法はありますか?

  18. 18

    FontAwesomeアイコンを含むこの関数を書くためのより効率的な方法はありますか?

  19. 19

    この短いスクリプトを書くためのより良い方法はありますか?

  20. 20

    Python辞書を保存するためのより速く効率的な方法はありますか?

  21. 21

    合体関数を書くためのより効率的な方法はありますか?

  22. 22

    これを書くためのよりクリーンな方法はありますか?(数字から文字列)

  23. 23

    これらのifステートメントを書くためのより良い方法はありますか

  24. 24

    Swift:この配列マッピングを書くためのよりエレガントな方法は?

  25. 25

    このコードを書くためのより短い方法はありますか?

  26. 26

    このコードをより短く、より効率的にする方法はありますか?

  27. 27

    これをコーディングするためのより効率的な方法はありますか?

  28. 28

    このコードをPythonで書く効率的な方法はありますか?

  29. 29

    この単純なスニペットを書くためのより簡潔な方法はありますか?

ホットタグ

アーカイブ