Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 特征值虚拟扩展稀疏矩阵_C++_Eigen - Fatal编程技术网

C++ 特征值虚拟扩展稀疏矩阵

C++ 特征值虚拟扩展稀疏矩阵,c++,eigen,C++,Eigen,我有一个大小为2N*N的稠密矩阵a,它必须乘以大小为N*2N的矩阵B 矩阵B实际上是两个稀疏矩阵X和Y的水平串联。B只需要只读访问 不幸的是,对于稀疏矩阵,似乎没有串联操作。当然,我可以简单地创建一个大小为N*2N的矩阵,并用数据填充它,但这似乎相当浪费。似乎有一种方法可以将X和Y组合成某种矩阵视图 在我的例子中,额外的简化是X或Y是一个零矩阵 对于您的特定情况,将A乘以X或Y就足够了,这取决于哪个非零。结果将与B简单矩阵代数的乘法完全相同。对于您的特定情况,将A乘以X或Y就足够了,这取决于哪一

我有一个大小为2N*N的稠密矩阵a,它必须乘以大小为N*2N的矩阵B

矩阵B实际上是两个稀疏矩阵X和Y的水平串联。B只需要只读访问

不幸的是,对于稀疏矩阵,似乎没有串联操作。当然,我可以简单地创建一个大小为N*2N的矩阵,并用数据填充它,但这似乎相当浪费。似乎有一种方法可以将X和Y组合成某种矩阵视图


在我的例子中,额外的简化是X或Y是一个零矩阵

对于您的特定情况,将A乘以X或Y就足够了,这取决于哪个非零。结果将与B简单矩阵代数的乘法完全相同。

对于您的特定情况,将A乘以X或Y就足够了,这取决于哪一个不是零。结果将与B简单矩阵代数的乘法完全相同。

如果结果矩阵为列主矩阵(默认值),则可以将部分结果分配给垂直子块,如下所示:如果X或Y在结构上为零,则相应的子积在O1中计算:

typedef Eigen::SparseMatrix<float> SM;

void foo(SM& out, SM const& A, SM const& X, SM const &Y)
{
    assert(X.rows()==Y.rows() && X.rows()==A.cols());

    out.resize(A.rows(), X.cols()+Y.cols());

    out.leftCols(X.cols()) = A*X;
    out.rightCols(Y.cols()) = A*Y;
}

如果您真的愿意,您可以编写一个包装器类,其中包含对两个稀疏矩阵X和Y的引用,并实现运算符*SparseMatrix,您的包装器-但根据您使用它的方式,可能最好进行显式函数调用。

如果您的结果矩阵是默认值,您可以将部分结果指定给垂直子块,如下所示:如果X或Y在结构上为零,则相应的子积在O1中计算:

typedef Eigen::SparseMatrix<float> SM;

void foo(SM& out, SM const& A, SM const& X, SM const &Y)
{
    assert(X.rows()==Y.rows() && X.rows()==A.cols());

    out.resize(A.rows(), X.cols()+Y.cols());

    out.leftCols(X.cols()) = A*X;
    out.rightCols(Y.cols()) = A*Y;
}

如果你真的想,你可以编写一个包装器类,其中包含对两个稀疏矩阵X和Y的引用,并实现操作符*SparseMatrix,你的包装器-但根据你如何使用它,可能最好是进行显式函数调用。

你说得对,没有注意到这一点。然而,我仍然对一般情况感到好奇。你是对的,没有注意到这一点。但是,我仍然对一般情况感到好奇。顺便说一句:您可能希望遵循此功能请求:顺便说一句:您可能希望遵循此功能请求: