从稀疏矩阵中提取块作为另一个稀疏矩阵

2024-01-21

如何从a中提取一个块Eigen::SparseMatrix<double>。好像没有我用过的密集方法。

‘class Eigen::SparseMatrix<double>’ has no member named ‘topLeftCorner’
‘class Eigen::SparseMatrix<double>’ has no member named ‘block’

有一种方法可以将块提取为Eigen::SparseMatrix<double> ?


我做了这个函数来从a中提取块Eigen::SparseMatrix<double,ColMaior>

typedef Triplet<double> Tri;
SparseMatrix<double> sparseBlock(SparseMatrix<double,ColMajor> M,
        int ibegin, int jbegin, int icount, int jcount){
        //only for ColMajor Sparse Matrix
    assert(ibegin+icount <= M.rows());
    assert(jbegin+jcount <= M.cols());
    int Mj,Mi,i,j,currOuterIndex,nextOuterIndex;
    vector<Tri> tripletList;
    tripletList.reserve(M.nonZeros());

    for(j=0; j<jcount; j++){
        Mj=j+jbegin;
        currOuterIndex = M.outerIndexPtr()[Mj];
        nextOuterIndex = M.outerIndexPtr()[Mj+1];

        for(int a = currOuterIndex; a<nextOuterIndex; a++){
            Mi=M.innerIndexPtr()[a];

            if(Mi < ibegin) continue;
            if(Mi >= ibegin + icount) break;

            i=Mi-ibegin;    
            tripletList.push_back(Tri(i,j,M.valuePtr()[a]));
        }
    }
    SparseMatrix<double> matS(icount,jcount);
    matS.setFromTriplets(tripletList.begin(), tripletList.end());
    return matS;
}

如果子矩阵位于四个角之一,则这些:

SparseMatrix<double> sparseTopLeftBlock(SparseMatrix<double> M,
        int icount, int jcount){
    return sparseBlock(M,0,0,icount,jcount);
}
SparseMatrix<double> sparseTopRightBlock(SparseMatrix<double> M,
        int icount, int jcount){
    return sparseBlock(M,0,M.cols()-jcount,icount,jcount);
}
SparseMatrix<double> sparseBottomLeftBlock(SparseMatrix<double> M,
        int icount, int jcount){
    return sparseBlock(M,M.rows()-icount,0,icount,jcount);
}
SparseMatrix<double> sparseBottomRightBlock(SparseMatrix<double> M,
        int icount, int jcount){
    return sparseBlock(M,M.rows()-icount,M.cols()-jcount,icount,jcount);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从稀疏矩阵中提取块作为另一个稀疏矩阵 的相关文章

随机推荐

  • std::hardware_delta_interference_size 在哪里?

    看起来像std hardware destructive interference size未在 libc 或 libstdc 中定义 我已经 grep 了我的本地安装 我查看了各自的 svn 存储库 他们应该在
  • Git 重置不起作用

    我进行了一次提交 拉取并合并了一些更改 然后进行了第二次提交 当我想回到第一次提交时 我运行了命令 git reset hard
  • 使用 python 读取 MS Word 文件中的自定义文档属性

    如何使用 python 获取 MS Word 2010 文档的文档属性 对于文档属性 我指的是那些可以在文件 gt 信息 gt 属性 gt 高级属性下添加或修改的属性 在 MS WORD 2010 中 我在 windows764bit 上使
  • C++编译器允许循环定义吗?

    当我为树编写一些代码时犯了一个错误时 我遇到了以下奇怪的情况 我已经对这个示例进行了很多精简 因此它只是一个线性树 基本上 在 main 函数中 我想将一个节点附加到我的树上 但我没有将其附加到 tree root 而是仅将其附加到 roo
  • 接受语言列表

    我想对浏览器发送到网站的 Accept Language 做出反应 有谁知道我可以在哪里获得浏览器可能发送到网站的所有可用 Accept Languages 的可靠列表 非常感谢 IANA 语言子标签注册表页面 http www iana
  • OpenGL:缩放然后翻译?如何?

    我有一些二维几何 我想在我的几何体周围获取一些边界矩形 然后在平面上的其他地方渲染它的较小版本 以下或多或少是我必须进行缩放和翻译的代码 source and dest are arbitrary rectangles float scal
  • 如何创建嵌套数组并将其存储在数据库中? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有一个像这样的数据 table tr th title 1 th td para1 td tr table table tr th tit
  • ARM 模板:AppSettings、WEBSITE_CONTENTSHARE 的存储端点不正确

    使用 ARM 模板将 Azure 函数部署到 USGov Arizona 时出现错误 模板适用于 Azure 商业版 错误是 12 34 11 12 33 27 PM Resource Microsoft Web sites config
  • 隐式声明scandir; alphasort 未声明

    我正在尝试使用scandir打印当前目录中的文件列表 当我尝试编译时 我收到以下错误和警告 warning implicit declaration of function scandir Wimplicit function declar
  • AngularJS + Protractor 对中继器中的所有行值求和

    我正在使用 Protractor 测试 AngularJS 我有一个中继器 我正在尝试对行中的所有值进行求和 并将其与汇总行值进行比较 这是我的 HTML table th td 100 td th tr td item a td tr t
  • 使用 Popen 控制 puttygen

    我正在编写一个 python 脚本来为用户生成 SSH 密钥 使用 ssh keygen 生成它们后 我想使用 puttygen 创建一个 ppk 文件 不幸的是 puttygen 不允许在命令行上提供密码 因此我尝试使用 popen 将它
  • SQL Server:清理@param以防止注入攻击

    为了便于讨论 我们就说我have to创建一个包含具有 INSERT 的 SQL 查询的局部变量 DECLARE insert NVARCHAR MAX SELECT insert INSERT INTO dbo table VALUES
  • 如何更改PowerShell默认模块安装文件夹?

    有没有办法更改PowerShell模块安装文件夹 模块放置在Install Module之后的文件夹 这就是我想这样做的原因 我使用的是 Windows 10 PowerShell 5 1 17763 503 我的默认安装文件夹是Docum
  • 连接行值

    我使用的是 Microsoft SQL Server 2005 并且能够根据以下查询连接行值 SELECT e1 EMP ID SELECT cast Sector ID as varchar 10 FROM Employee Sector
  • 将浮动div设置为高度:100%?

    我怀疑这个问题没有答案 但我想知道是否有办法将浮动 div 的高度设置为 100 我在包装 div 中有两个 div div div div div div div 右侧 div 有一个设定的高度 我希望左侧 div 与其匹配 所以我创建了
  • 如何使用 VSCode 1.5+ 作为 Git 的默认编辑器

    我正在尝试将 Git 配置为使用 VSCode 作为我的默认编辑器 我的问题是 一旦打开文件 VSCode 就会退出并将控制权交还给 PowerShell 提示符 例如在执行变基操作时会导致问题 我知道如何使用 Visual Studio
  • 如何测试只修改私有类成员变量的void方法?

    我正在尝试对初始化一些私有字段的类中的方法进行单元测试 public void init Properties props throws Exception this language props getProperty Constants
  • R包中的延迟加载错误

    我正在 R 版本 3 1 3 中构建 R 包 但每当我尝试安装它时 我都会收到以下错误消息 installing source package SPO R data moving datasets to lazyload DB prepar
  • 使用 Google 地图“已达到纹理图集的最大数量,无法分配更多”

    我正在构建一个使用 Google 地图和大量叠加层的应用程序 似乎当我尝试加载大量叠加层时 它会停止并为我提供 null 为 false 已达到纹理图集的最大数量 无法分配更多 我只是这样添加图像作为叠加层 if image nil let
  • 从稀疏矩阵中提取块作为另一个稀疏矩阵

    如何从a中提取一个块Eigen SparseMatrix