Rの外部関数からスパース行列を作成するにはどうすればよいですか?

コール

私のコードでは、外部関数は行列を出力します。その出力をスパース行列にすることは可能ですか?この出力行列をスパース行列に変換することはできますが、最初に密行列を作成してから変換するのではなく、outer(......、sparse = T)のようなことをしたいと思います。私は非常に大きなデータを持っているからです。私のコードと短いサンプルベクトルは以下のとおりです。関連するすべての投稿を読みましたが、理解できません。

# myvec is a vector of length 100. 
# mycol is a column vector of length 10.

myvec <- c( 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 1, 0, 2, 1, 2, 1, 3, 2, 2, 1, 0, 1, 2, 1, 0, 2, 1, 2, 1, 3, 2, 2, 1, 0,1, 
          2, 2, 3, 1, 2, 1, 0, 2, 1, 2, 1,0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 1, 0, 2, 1, 2, 1, 3, 2, 2, 1, 0, 1, 2,
          1, 0, 2, 1, 2, 1, 3, 2, 2, 1, 0,1, 2, 2, 3, 1, 2, 1, 0, 2, 1, 2, 1,0, 1, 1, 2, 1, 2, 2, 3)


mycol <- c(-15.07,-7.64, -15.48, -18.59, -12.35, -10.44, -11.45, -18.49, -15.24, -13.23)   
 
res <- outer(1:length(mycol), 1:length(mycol), function(i,j) {
               ifelse(myvec > 1, 0, 
                 ifelse(myvec == 1, (mycol[j]-mycol[i])/(1-exp(-(mycol[j]-mycol[i]))), 
                   ifelse(myvec ==0, 1, myvec)))})

また、行、列、値のトリプレットを使用してスパース行列を最初から作成しようとしました。コードは次のとおりです。ただし、エントリ(resvec)の長さが100であるため、スパース行列が作成されますが、対角へのエントリの最初の10のみが使用され、残りの非対角要素はゼロになります。しかし、私は100のエントリすべてをそれらの場所に書き込みたかったのです。

よろしくお願いします。

resvec<- as.vector(res)

matSparse <- sparseMatrix(
  i = 1:length(mycol), 
  j = 1:length(mycol), 
  x = resvec,
  dims = c(length(mycol),length(mycol)), 
  dimnames = list(rownames,colnames)
)

ps:行名と列名は同じです。

疑似スピン

このようなもので、ゼロ以外の結果を生成する値に対してouterのみ、何をするかをやり直してmyvecます。関数fを少し単純化して、おそらくそれを関数にすることmyvecもできます。

f <- function(i,j) {
  ifelse(myvec > 1, 0, 
    ifelse(myvec == 1, (mycol[j]-mycol[i])/(1-exp(-(mycol[j]-mycol[i]))), 
      ifelse(myvec ==0, 1, myvec)))}

library(Matrix)
i <- rep(1:length(mycol), times = length(mycol))[myvec < 2]
j <- rep(1:length(mycol), each = length(mycol))[myvec < 2]
myvec <- myvec[myvec < 2]
sparseMatrix(i, j, x = f(i, j))
#> 10 x 10 sparse Matrix of class "dgCMatrix"
#>                                                                                                                 
#>  [1,] 1.000000000  7.434410 1.000000000 .          2.9118151 4.675609 .          1.0000000 0.91740717 .         
#>  [2,] 0.004409999  1.000000 0.003087581 .          1.0000000 .        0.08629586 .         .          0.02095708
#>  [3,] 1.218969243  .        .           0.14518433 .         .        .          0.1560604 .          1.00000000
#>  [4,] .           10.950192 3.255184331 1.00000000 6.2521909 .        .          .         .          5.38531586
#>  [5,] 0.191815105  .        1.000000000 0.01219087 .         2.241996 .          0.0132598 0.17006693 0.62371549
#>  [6,] .            2.981293 .           .          0.3319956 .        0.57859728 .         .          .         
#>  [7,] .            .        0.072926774 .          1.0000000 1.588597 1.00000000 .         0.08761709 0.36106528
#>  [8,] .            .        .           .          6.1532598 1.000000 7.04617334 .         1.00000000 .         
#>  [9,] 1.087407174  .        0.884795398 0.12180607 3.0600669 .        .          0.1310995 .          .         
#> [10,] .            5.610957 .           .          .         2.972579 2.14106528 1.0000000 0.31098581 .

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

PythonでOpenCVminMaxLoc関数のマスク行列変数を作成するにはどうすればよいですか?

分類Dev

Rの関数から元の行列の値を変更するにはどうすればよいですか?

分類Dev

相互作用するスパース行列を作成するにはどうすればよいですか?

分類Dev

スパースライブラリから作成されたスパース行列をPythonで保存するにはどうすればよいですか?

分類Dev

外部Rコードファイルから関数のリストをロードするにはどうすればよいですか?

分類Dev

パーツのリストからURLパスを作成するにはどうすればよいですか?

分類Dev

dtype = float16で巨大なスパース行列を作成するにはどうすればよいですか?

分類Dev

R:キャスト関数を使用してループ内に行列を作成するにはどうすればよいですか?

分類Dev

nサイズのブロックからブロックスパース行列を作成するにはどうすればよいですか?

分類Dev

外部ソースから文字列リソースを作成するにはどうすればよいですか?

分類Dev

可変数の行列を連結する関数を作成するにはどうすればよいですか?

分類Dev

Rで関数のリストを作成するにはどうすればよいですか?

分類Dev

Rで関数のリストを作成するにはどうすればよいですか?

分類Dev

Rのデータセットの値を使用して行列を作成する関数を作成するにはどうすればよいですか?

分類Dev

Rのリストから関数を削除するにはどうすればよいですか?

分類Dev

関数のテストケースを作成するにはどうすればよいですか?PHP

分類Dev

Pythonのクラスから外部関数を呼び出すにはどうすればよいですか?

分類Dev

Rで右上から左下に対角行列を作成する関数を作成するにはどうすればよいですか?

分類Dev

rでインデックスの行列を作成するにはどうすればよいですか?

分類Dev

forEach()ステートメントを使用するようにこれらの関数を作成するにはどうすればよいですか?

分類Dev

Rの古いリストから個々の行列列を含む新しいリストを作成するにはどうすればよいですか?

分類Dev

2つの行列を比較する誤差関数を作成するにはどうすればよいですか?

分類Dev

2つのスパース行列の集合の差を取得するにはどうすればよいですか?

分類Dev

スパース行列の遅いgroupbyを回避するにはどうすればよいですか?

分類Dev

BucketingSink関数Flinkの動的ベースパスを設定するにはどうすればよいですか?

分類Dev

R言語を使用して、整数のリストからのみ奇数を返す関数を作成するにはどうすればよいですか?

分類Dev

文字列のリストからペアオカレンスの二項関係行列を作成するにはどうすればよいですか?

分類Dev

関数から関数本体スコープまでのパラメーター変数を使用するにはどうすればよいですか?

分類Dev

スパース行列のビューを取得するにはどうすればよいですか?

Related 関連記事

  1. 1

    PythonでOpenCVminMaxLoc関数のマスク行列変数を作成するにはどうすればよいですか?

  2. 2

    Rの関数から元の行列の値を変更するにはどうすればよいですか?

  3. 3

    相互作用するスパース行列を作成するにはどうすればよいですか?

  4. 4

    スパースライブラリから作成されたスパース行列をPythonで保存するにはどうすればよいですか?

  5. 5

    外部Rコードファイルから関数のリストをロードするにはどうすればよいですか?

  6. 6

    パーツのリストからURLパスを作成するにはどうすればよいですか?

  7. 7

    dtype = float16で巨大なスパース行列を作成するにはどうすればよいですか?

  8. 8

    R:キャスト関数を使用してループ内に行列を作成するにはどうすればよいですか?

  9. 9

    nサイズのブロックからブロックスパース行列を作成するにはどうすればよいですか?

  10. 10

    外部ソースから文字列リソースを作成するにはどうすればよいですか?

  11. 11

    可変数の行列を連結する関数を作成するにはどうすればよいですか?

  12. 12

    Rで関数のリストを作成するにはどうすればよいですか?

  13. 13

    Rで関数のリストを作成するにはどうすればよいですか?

  14. 14

    Rのデータセットの値を使用して行列を作成する関数を作成するにはどうすればよいですか?

  15. 15

    Rのリストから関数を削除するにはどうすればよいですか?

  16. 16

    関数のテストケースを作成するにはどうすればよいですか?PHP

  17. 17

    Pythonのクラスから外部関数を呼び出すにはどうすればよいですか?

  18. 18

    Rで右上から左下に対角行列を作成する関数を作成するにはどうすればよいですか?

  19. 19

    rでインデックスの行列を作成するにはどうすればよいですか?

  20. 20

    forEach()ステートメントを使用するようにこれらの関数を作成するにはどうすればよいですか?

  21. 21

    Rの古いリストから個々の行列列を含む新しいリストを作成するにはどうすればよいですか?

  22. 22

    2つの行列を比較する誤差関数を作成するにはどうすればよいですか?

  23. 23

    2つのスパース行列の集合の差を取得するにはどうすればよいですか?

  24. 24

    スパース行列の遅いgroupbyを回避するにはどうすればよいですか?

  25. 25

    BucketingSink関数Flinkの動的ベースパスを設定するにはどうすればよいですか?

  26. 26

    R言語を使用して、整数のリストからのみ奇数を返す関数を作成するにはどうすればよいですか?

  27. 27

    文字列のリストからペアオカレンスの二項関係行列を作成するにはどうすればよいですか?

  28. 28

    関数から関数本体スコープまでのパラメーター変数を使用するにはどうすればよいですか?

  29. 29

    スパース行列のビューを取得するにはどうすればよいですか?

ホットタグ

アーカイブ