RのA/Bは、行列に対して要素ごとの除算を実行します。
ただし、Matrixパッケージからスパース行列を生成し、A / Bを分割しようとすると、次のエラーが発生します。
> class(N)
[1] "dgCMatrix"
attr(,"package")
[1] "Matrix"
> N/N
Error in asMethod(object) :
Cholmod error 'problem too large' at file ../Core/cholmod_dense.c, line 105
>
面白い。スパース行列の合計サイズが小さい場合、次の動作が発生します。
> m <- sparseMatrix(i=c(1,2,1,3), j=c(1,1,3,3), x=c(1,2,1,4))
> m/m
3 x 3 Matrix of class "dgeMatrix"
[,1] [,2] [,3]
[1,] 1 NaN 1
[2,] 1 NaN NaN
[3,] NaN NaN 1
>
しかし、適度なサイズ(〜20000要素)の場合、Cholmodエラーが発生します。
Rのスパース行列で要素ごとの除算を行うための回避策またはより適切な方法はありますか?