2

Rでは、dgCMatrixのゼロ以外の値をベクトルに設定したいと考えています。

例えば:

dgCMatrix は次のとおりです。

M
3 x 4 sparse Matrix of class "dgCMatrix"

[1,] . 1 . 1
[2,] . . 1 .
[3,] . . 1 .

そして、ここにベクトルがあります:

a <- c(1,2,3,4)

次に、ゼロ以外の値を列ごとにベクトルに設定したいと思います。結果は次のようになります。

[1,] . 2 . 4
[2,] . . 3 .
[3,] . . 3 .

ありがとう 。

4

1 に答える 1

2

これはかなり一般的に効率的です。

library(Matrix)
M <- Matrix(c(0,0,0,1,0,0,0,1,1,1,0,0), nc=4) ## Recreates your dgCMatrix
a <- 1:4

M %*% Diagonal(x=a)
# 3 x 4 sparse Matrix of class "dgCMatrix"
#             
# [1,] . 2 . 4
# [2,] . . 3 .
# [3,] . . 3 .

編集:

M0 と 1 以外の値がある 場合は、代わりに次のいずれかを使用できます。

M <- M * 11:14  ## Alter M to test the following code 

as(M>0 | M<0, "dgCMatrix") %*% Diagonal(x=a)

as(!M==0, "dgCMatrix") %*% Diagonal(x=a)
于 2012-10-24T21:36:33.987 に答える