eigen 是否有像 H.transpose()*H 这样的自转置乘法优化

2023-12-05

我浏览过 eigen 的教程https://eigen.tuxfamily.org/dox-devel/group__TutorialMatrixArithmetic.html

它说 “注意:对于担心性能的 BLAS 用户,c.noalias() -= 2 * a.adjoint() * b; 等表达式已完全优化并触发单个类似 gemm 的函数调用。”

但是像 H.transpose() * H 这样的计算怎么样,因为它的结果是一个对称矩阵,所以它应该只需要正常 A*B 一半的时间,但在我的测试中, H.transpose() * H 花费与 H 相同的时间.transpose() * B. eigen对于这种情况有没有特殊的优化,像opencv一样,有类似的功能。

我知道对称优化会破坏矢量化,我只想知道 eigen 是否有可以同时提供对称优化和矢量化的解决方案


你是对的,你需要告诉 Eigen 结果是对称的:

Eigen::MatrixXd H = Eigen::MatrixXd::Random(m,n);
Eigen::MatrixXd Z = Eigen::MatrixXd::Zero(n,n);
Z.template selfadjointView<Eigen::Lower>().rankUpdate(H.transpose());

最后一行计算Z += H * H^T位于下三角部分内。上部保持不变。您想要一个完整的矩阵,然后将下半部分复制到上半部分:

Z.template triangularView<Eigen::Upper>() = Z.transpose();

This rankUpdate例程是完全矢量化的并且与 BLAS 等效项相当。对于小矩阵,更好地执行完整的乘积。

另请参阅相应的doc.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

eigen 是否有像 H.transpose()*H 这样的自转置乘法优化 的相关文章

  • ORTOOLS 中的多个 MILP 解决方案 [python]

    我正在尝试使用 Python 中的 or tools 来解决具有多个最佳解决方案的混合整数线性程序 然而 NextSolution 总是返回False 所以我无法检索多个解决方案 我知道这个函数使用约束求解器工作 但我想使用 MILP 求解
  • 优化两个三位数乘积的最大回文数?

    我正在研究一个面试问题 我被问到这个问题 我应该编写一个程序 从两个三位数的乘积中找到最大的回文数 这里是question https projecteuler net problem 4 我想出了这种从底部开始的蛮力方法 public c
  • 如何有效地扫描每次迭代交替的 2 位掩码

    给定 2 个位掩码 应交替访问 0 1 0 1 我尝试获得运行时高效的解决方案 但找不到比以下示例更好的方法 uint32 t mask 2 uint8 t mask index 0 uint32 t f tzcnt u32 mask ma
  • Java中的整数缓存[重复]

    这个问题在这里已经有答案了 可能的重复 奇怪的Java拳击 https stackoverflow com questions 3130311 weird java boxing 最近我看到一个演示 其中有以下 Java 代码示例 Inte
  • 哪个更快:清除集合或实例化新集合

    我的代码中有一些通用列表 其中有数十或数百个元素 有时我需要用其他对象重新填充此列表 所以问题是 调用什么会更快Clear 方法或创建一个new List
  • 网页优化:为什么组合文件速度更快?

    我读过 将所有 css 文件合并为一个大文件 或将所有脚本文件合并为一个脚本文件 可以减少 HTTP 请求的数量 从而加快下载速度 但我不明白这一点 我认为如果你有多个文件 最多有一个限制 我相信在现代浏览器上是 10 个 浏览器会并行下载
  • OpenMP 共享与第一私有性能比较

    我有一个 pragma omp parallel for在类方法内循环 每个线程只读访问很少的方法局部变量 很少调用私有数据和方法的参数 所有这些都在一个声明中声明shared条款 我的问题 性能方面不应该有任何区别声明这些 变量share
  • HTML5 - Canvas - 大图像优化

    我需要建立一个HTML5 canvas其中包含非常大的图像 可能高达 10 15MB 我的第一个想法是将图像分成几个块 这些块将在画布上水平移动时加载 对这个想法有什么想法吗 这是一件好事吗 也许我错过了一些已经实现的优化功能 你说得对 这
  • 平衡括号问题的优化解

    给定一个仅包含字符的字符串 and 判断输入字符串是否有效 输入字符串在以下情况下有效 左括号必须由相同类型的括号封闭 左括号必须按正确的顺序关闭 请注意 空字符串也被视为有效 示例1 Input Output true Example 2
  • 优化 - 步进可能表现奇怪:iOS/Unity

    我正在尝试将 Unity 集成到 iOS 应用程序中 我已经遵循了这个教程http www agnosticdev com blog entry swift integrating unity and vuforia ios swift p
  • 如何缩短 PHP if 语句?

    我有一个 if 语句 我需要将单个字符串与许多不同的选项进行比较 我在下面发布的代码非常清楚地表明了我的意思 我知道有两种方法可以做到这一点 但另一种甚至更长 那么 是否有任何函数可以以更短的方式实现类似的功能 我的要求可能看起来很愚蠢 但
  • 如何加速我的 Perl 程序?

    这确实是两个问题 但它们非常相似 为了简单起见 我想我应该把它们放在一起 Firstly 给定一个已建立的 Perl 项目 除了简单的代码优化之外 还有哪些不错的方法可以加速它 Secondly 用Perl从头开始编写程序时 有哪些好的方法
  • 为什么我应该使用内联代码? [复制]

    这个问题在这里已经有答案了 我是一名 C C 开发人员 这里有几个始终困扰我的问题 常规 代码和内联代码之间有很大区别吗 主要区别是什么 内联代码只是宏的一种 形式 吗 选择内联代码时必须进行什么样的权衡 Thanks 表现 正如之前的答案
  • 优化正则表达式以过滤数千个 HTML 选择选项

    背景 我开发了一个基于 jQuery 的穿梭小部件 https stackoverflow com a 13557000 59087对于 HTMLselect元素 因为我找不到一个经过最低限度编码并提供正则表达式过滤器来补偿的元素变音符号
  • 删除大量记录需要很长时间

    我有一个包含约 60 000 行的数据库表 在 SQL Server 2012 Express 上运行 我使用以下代码来清除旧行 Deleting CPU measurements older than oldestAllowedTime
  • 如何查看Eigen C++模板库的版本号?

    我添加了几个不同版本的 Eigen 默认值 包括 Visual C 的目录 但是我在使用的时候遇到了崩溃的问题LDLT Cholesky 分解 一些测试数值示例 所以我想在调试代码时确定哪个版本实际上是活动的 是否有任何函数可以指示当前活动
  • 使用 numpy 加速 for 循环

    下一个 for 循环如何使用 numpy 获得加速 我想这里可以使用一些奇特的索引技巧 但我不知道是哪一个 这里可以使用 einsum 吗 a 0 for i in range len b a numpy mean C d e f b i
  • 编译器什么时候内联函数?

    在 C 中 函数仅在显式声明时才内联inline 或在头文件中定义 或者编译器是否允许内联函数 因为他们认为合适 The inline关键字实际上只是告诉链接器 或告诉编译器告诉链接器 同一函数的多个相同定义不是错误 如果您想在标头中定义函
  • 单个返回语句与多个返回语句? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 Actionscript-3 中优化 2D Flash 游戏的动态背景引擎

    编辑2 根据缺乏回复来判断 我开始怀疑我的问题是否足够清楚 请告诉我是否需要详细说明 注意 请参阅底部以获取代码更新 简短介绍 我正在用 ActionScript 编写一个二维 Flash 空间游戏 宇宙无限大 由于这个特性 背景必须动态渲

随机推荐

  • RESTAdapter 初始化后添加标头

    我正在尝试添加一个Authorization适配器初始化和使用后 我的适配器请求的标头 我可以在创建时以静态方式添加标题ApplicationAdapter 但我似乎无法让它在后续 REST 调用中使用标头 我正在尝试这个 var auth
  • 使用 AntBuilder 在 Groovy 中压缩文件/目录

    我正在尝试使用 AntBuilder 压缩 Groovy 中的文件和目录 我有以下代码 def ant new AntBuilder ant zip basedir Testing destfile file zip includes fi
  • ITextSharp 中的页眉和页脚

    我知道这个问题已经被问过一千次了 但我还没有找到直接的答案 我对 ITextSharp 比较陌生 所以请像在和幼儿说话一样解释 如何将简单的纯文本页眉和页脚添加到我正在创建的文档中 我正在使用以下代码创建一个简单的 pdf 文档 void
  • 使 Codeigniter 网站多语言化的最佳方法。从 lang 数组调用取决于 lang 会话?

    我正在研究几个小时 但我找不到任何清晰 有效的方法来实现它 我有一个英文版的 codeigniter 基础网站 现在我必须添加波兰语 根据访问者的选择将我的网站设置为两种语言的最佳方法是什么 有没有办法为每种语言创建数组文件并在视图文件中调
  • ASP Classic - 类型不匹配:'CInt' - 简单问题

    ASP classic 中存在类型转换问题 这是我的代码 Set trainingCost Server CreateObject ADODB Recordset strSQL3 SELECT cost1 FROM tblMain WHER
  • 有没有办法将 MongoDB shell 输出“漂亮”地打印到文件中?

    具体来说 我想打印 mongodb 的结果find 到一个文件 JSON 对象太大 因此我无法使用 shell 窗口大小查看整个对象 shell 提供了一些不错但隐藏的功能 因为它是一个交互式环境 当您通过 mongo Commands j
  • 在mysql中通过key在json中查找

    我有一个 json 我想提取一个键的值 我知道钥匙名称 但不知道位置 我的 json 很复杂 在 mysql 中看起来像这样 set jsonstr glossary title example glossary GlossDiv titl
  • Swift 3 - 如何验证对象的类类型

    这行代码曾经适用于 Swift 2 但现在在 Swift 3 中不正确 if gestureRecognizer isMember of UITapGestureRecognizer 我收到此错误 类型名称后需要成员名称或构造函数调用 正确
  • 格式化 UITextField 以用于信用卡输入,例如 (xxxx xxxx xxxx xxxx)

    我想格式化一个UITextField用于输入信用卡号码 使其仅允许输入数字并自动插入空格 以便该号码的格式如下 XXXX XXXX XXXX XXXX 我怎样才能做到这一点 如果您使用 Swift 请阅读我对 Swift 4 的回答的移植并
  • 在 C/C++ 中将矩阵读取为二维数组

    在 C 中将数字矩阵读取 输入到数组中的最简单方法是什么 这是文件内容 尺寸未知 283 278 284 290 290 286 273 266 266 266 261 252 246 382 380 379 381 382 379 384
  • Ajax 响应文本返回为未定义

    我在这段代码中遇到了问题 返回值返回为 未定义 有什么问题 var fx null xmlhttp open GET URL false xmlhttp onreadystatechange function alert enter fun
  • 条形图:更改 x 轴并添加线条

    我有一个动物园 其每日数据如下所示 gt head almorol 1973 10 02 1973 10 03 1973 10 04 1973 10 05 1973 10 06 1973 10 07 183 9 208 2 153 7 84
  • 如何序列化Java类的静态数据成员?

    当我们序列化对象的时候 静态成员是不会被序列化的 但是如果我们需要序列化的话 有什么办法吗 第一个问题是为什么需要序列化静态成员 静态成员与类相关联 而不是与实例相关联 因此在序列化实例时包含它们没有意义 第一个解决方案是使这些成员不是静态
  • 提高 Angular2 输入字段的性能

    我有一个包含日期的组件列表 格式为toLocaleString 和其他东西 在它们之上有一个用于创建新组件的组件 其中包含一个表单 其中包含一些使用 Angulars FormBuilder 构建的输入字段 当我快速输入时 验证会滞后 并且
  • MySQL 错误 1436:线程堆栈溢出,使用简单查询

    我正在对表进行非常简单的更新 这也会触发一个非常简单的触发器 并且它给了我错误 1436 Thread stack overrun 6136 bytes used of a 131072 byte stack and 128000 byte
  • Python 对象的良好风格

    在使用 Python 之前 我的大部分编程都是使用 C 或 Matlab 进行的 我没有计算机科学学位 几乎完成了物理学博士学位 但已经完成了一些课程和大量的实际编程 现在 我正在 Coursera 上学习算法课程 顺便说一句 由斯坦福大学
  • 如何设置App Maker数据源中的当前项目?

    这看起来很基本 但我似乎无法弄清楚如何手动设置当前项目以从数据源使用 举例来说 我有一个表 我注意到当我选择一行来编辑字段时 该行的项目将成为当前项目 因此如果我在该行上有一个链接以导航到页面 则该行的行所选项目将是导航页面的 dataso
  • 按组移动窗口计数不同项

    假设我有一个包含医院就诊的数据集 我的目标是生成一个变量 用于计算访问者在访问日期之前见过的唯一患者的数量 我经常使用 dplyr 的 group by 但这似乎有点棘手 我想我必须使用 group by n distinct 和 sum
  • Python 连接不显示 Swagger UI

    我使用 connexion 模块构建了一个基于 Python Flask 的 REST API 这与使用 swagger yml 文件定义 REST API 一样效果很好 该应用程序正在运行 但是当我导航到
  • eigen 是否有像 H.transpose()*H 这样的自转置乘法优化

    我浏览过 eigen 的教程https eigen tuxfamily org dox devel group TutorialMatrixArithmetic html 它说 注意 对于担心性能的 BLAS 用户 c noalias 2