繁体   English   中英

稀疏特征矩阵的子集列

[英]Subset columns of sparse eigen matrix

我想采用一些稀疏矩阵(主要列)的子集列据我所知,Eigen 中有索引内容。 但我不能称它为稀疏矩阵:

Eigen::SparseMatrix<double> m;
std::vector<int> indices = {1, 5, 3, 6};
// error: type 'Eigen::SparseMatrix<double>' does not provide a call operator
m(Eigen::all, indices); 

有什么解决方法吗?

UPD1 明确指定列可以按任意顺序排列。

SparseMatrix 实际上不提供任何operator() ,因此无法做到这一点。

编辑:以下是针对旧版本的问题。

如果您的实际用例还具有您要访问的列相邻的属性,您可以改用

SparseMatrix<double,ColMajor> m(5,5);
int j = 1;
int number_of_columns=2;
m.middleCols(j,number_of_columns) = ...;

还有m.leftCols(number_of_columns)m.rightCols(number_of_columns)这些甚至是可写的,因为矩阵是列优先的。

所有其他块表达式都已定义但只读,请参阅相应的稀疏矩阵文档

编辑:回答更新的问题:我猜你将无法避免复制。 通过复制可以像这样完成(未测试)

Eigen::SparseMatrix<double> m;
std::vector<int> indices = {1, 5, 3, 6};
Eigen::SparseMatrix<double> column_subset(m.rows(),indices.size());
for(int j =0;j!=column_subset.cols();++j){
column_subset.col(j)=m.col(indices[j]);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM