gpt4 book ai didi

python - 在稀疏设计矩阵上使用 rpy2 运行 glmnet?

转载 作者:行者123 更新时间:2023-12-02 03:41:24 26 4
gpt4 key购买 nike

我有一个 python 片段,它可以很好地在 np.array X 和 y 上运行 GLMNET。但是,当 X 是来自 scipy 的列稀疏矩阵时,代码失败,因为 rpy2 无法转换 X。我犯了一个明显的错误吗?

MCVE 是:

import numpy as np
from scipy import sparse
from rpy2 import robjects
import rpy2.robjects.packages as rpackages
from rpy2.robjects import numpy2ri
from rpy2.robjects import pandas2ri

if __name__ == "__main__":
X = sparse.rand(5, 20, density=0.1)
y = np.random.randn(5)
numpy2ri.activate()
pandas2ri.activate()

utils = rpackages.importr('utils')
utils.chooseCRANmirror(ind=1)
if not rpackages.isinstalled('glmnet'):
utils.install_packages("glmnet")
glmnet = rpackages.importr('glmnet')

glmnet = robjects.r['glmnet']
glmnet_fit = glmnet(X, y, intercept=False, standardize=False)

当我运行它时,我得到了一个NotImplementedError:

Conversion 'py2ri' not defined for objects of type '<class 'scipy.sparse.csc.csc_matrix'>'

我可以用不同的方式提供 X 吗?如果 rpy2 无法处理稀疏矩阵,我会感到惊讶。

最佳答案

您可以使用 rpy2 创建一个稀疏矩阵,如下所示:

import numpy as np
import rpy2.robjects as ro
from rpy2.robjects.packages import importr
from scipy import sparse

X = sparse.rand(5, 20, density=0.1).tocoo()
r_Matrix = importr("Matrix")
r_Matrix.sparseMatrix(
i=ro.IntVector(X.row + 1),
j=ro.IntVector(X.col + 1),
x=ro.FloatVector(X.data),
dims=ro.IntVector(X.shape))

关于python - 在稀疏设计矩阵上使用 rpy2 运行 glmnet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48488665/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com