gpt4 book ai didi

c++ - RcppEigen 稀疏矩阵插入操作给出无效类 “dgCMatrix” 错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:20:45 26 4
gpt4 key购买 nike

我正在努力加快使用 C++ 快速构建一些用于 R 的稀疏矩阵的速度。但是,我似乎无法使用插入方法更改 Eigen 中稀疏矩阵的单个元素并获得正确的类 dgCMatrix 的 R 对象。下面是一个简单的例子。

C++代码是:

#include <RcppEigen.h>

// [[Rcpp::depends(RcppEigen)]]
using Eigen::SparseMatrix; // sparse matrix

// [[Rcpp::export]]
SparseMatrix<double> SimpleSparseMatrix(int n) {
SparseMatrix<double> new_mat(n, n);
new_mat.insert(0, 0) = 2;
Rcpp::Rcout << new_mat << std::endl;
return new_mat;
}

结果 R 是:

> SimpleSparseMatrix(2)
2 0
0 0

2 x 2 sparse Matrix of class "dgCMatrix"
Error in validObject(x) :
invalid class “dgCMatrix” object: last element of slot p must match length of slots i and x

正如您从标准输出中看到的那样,eigen 正在做正确的事情。但是,生成的稀疏矩阵对象格式不正确。事实上,查看它的插槽会显示 p 的无效值:

> foo <- SimpleSparseMatrix(2)
2 0
0 0

> str(foo)
Formal class 'dgCMatrix' [package "Matrix"] with 6 slots
..@ i : int 0
..@ p : int [1:3] 0 2 4
..@ Dim : int [1:2] 2 2
..@ Dimnames:List of 2
.. ..$ : NULL
.. ..$ : NULL
..@ x : num 2
..@ factors : list()

有什么想法可能会出错吗?

最佳答案

insert 语句之后添加此语句:

  new_mat.makeCompressed();

关于c++ - RcppEigen 稀疏矩阵插入操作给出无效类 “dgCMatrix” 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26694446/

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