使用 LAPACK 访问子矩阵

2023-12-31

LAPACK 中有一个函数可以给我特定子矩阵的元素吗?如果是的话,C++ 的语法是什么?

或者我需要编码吗?


没有用于访问子矩阵的函数。然而,由于 LAPACK 例程中矩阵数据的存储方式,您不需要它。这节省了大量的复制工作,并且(部分)选择了数据布局,原因如下:

回想一下,LAPACK 中的稠密(即非带状、三角形、厄米特等)矩阵由四个值定义:

  • 指向矩阵左上角的指针
  • 矩阵的行数
  • 矩阵的列数
  • 矩阵的“主维”;通常,这是内存中一行相邻元素之间的距离。

大多数时候,大多数人只使用等于行数的前导维度; 3x3 矩阵通常存储如下:

a[0] a[3] a[6] 
a[1] a[4] a[7]
a[2] a[5] a[8]

假设我们想要一个具有前导维度的巨大矩阵的 3x3 子矩阵lda。假设我们特别想要左上角位于 a(15,42) 的 3x3 子矩阵:

         .             .            .
         .             .            .
... a[15+42*lda] a[15+43*lda] a[15+44*lda] ...
... a[16+42*lda] a[16+43*lda] a[16+44*lda] ...
... a[17+42*lda] a[17+43*lda] a[17+44*lda] ...
         .             .            .
         .             .            .

We could将此 3x3 矩阵复制到连续存储中,但如果我们想将其作为输入(或输出)矩阵传递给 LAPACK 例程,则不需要;我们只需要适当地定义参数即可。我们称这个子矩阵为b;然后我们定义:

// pointer to the top-left corner of b:
float *b = &a[15 + 42*lda];
// number of rows in b:
const int nb = 3;
// number of columns in b:
const int mb = 3;
// leading dimension of b:
const int ldb = lda;

唯一可能令人惊讶的是它的价值ldb;通过使用该值lda对于“大矩阵”,我们可以在不复制的情况下寻址子矩阵,并就地对其进行操作。

However我撒了谎(某种程度上)。有时您确实无法就地操作子矩阵,并且确实需要复制它。我不想谈论这一点,因为这种情况很少见,并且您应该尽可能使用就地操作,但如果不告诉您这是可能的,我会感到很难过。例程:

SLACPY(UPLO,M,N,A,LDA,B,LDB)

复制MxN矩阵的左上角为A并以主尺寸存储LDA to the MxN矩阵的左上角为B并具有领先的尺寸LDB. The UPLO参数表示是复制上三角、下三角还是整个矩阵。

在我上面给出的示例中,您可以像这样使用它(假设使用 clapack 绑定):

...
const int m = 3;
const int n = 3;
float b[9];
const int ldb = 3;
slacpy("A",  // anything except "U" or "L" means "copy everything"
       &m,   // number of rows to copy
       &n,   // number of columns to copy
       &a[15 + 42*lda], // pointer to top-left element to copy
       lda,  // leading dimension of a (something huge)
       b,    // pointer to top-left element of destination
       ldb); // leading dimension of b (== m, so storage is dense)
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 LAPACK 访问子矩阵 的相关文章

  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 如何将 numpy.matrix 提高到非整数幂?

    The 运算符为numpy matrix不支持非整数幂 gt gt gt m matrix 1 0 0 5 0 5 gt gt gt m 2 5 TypeError exponent must be an integer 我想要的是 oct
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern

随机推荐

  • 在 xaml 窗口和用户控件 WPF 之间传递参数

    如何将参数从 xaml 窗口传递到 WPF 用户控件构造函数 我尝试过创建依赖属性 但失败了 我应该尝试 xaml 扩展还是有其他方法可以做到这一点
  • 使用opencv检测肤色

    如何检测皮肤的颜色使用OpenCV 使用 OpenCV 怎么样 哈尔人脸检测器找到一个面部区域 然后得到平均或最常见的颜色在那个脸部区域 既然应该是肤色 Update 环境 我的镜框将具有面部特征 仅限从头发到肩膀 如附件所示 你真的不需要
  • 片段选项卡和片段活动

    我按照指南使用 Fragments 创建了一个应用程序 以便我可以在更大的屏幕上显示更详细的视图 不过 我也想使用选项卡进行导航 根据指南 选项卡也应该是片段 而不是已弃用的 TabHost 一些谷歌搜索表明你不能 不应该嵌套片段 我的问题
  • 在 Java 中解析日期格式

    我正在尝试用 Java 将日期转换为 Unix 时间戳 我的日期示例为 Fri Jun 05 15 53 07 PDT 2009 我的代码是 DateFormat dateFormat new SimpleDateFormat EEE MM
  • 忽略 R 字符串中的转义字符(反斜杠)

    在 SPSS 中运行 R 插件时 我收到一个 Windows 路径字符串作为输入 例如 C Users mhermans somefile csv 我想在后续的 R 代码中使用该路径 但是需要用正斜杠替换斜杠 否则 R 将其解释为转义符 例
  • 如何在 R 中为 tableGrob 自定义特定列?

    我正在寻找自定义 tableGrob 中的特定列 对于这个可重现的示例 我选择查看自定义理由 假设您有以下数据框 df lt data frame Order c 1 3 Name c Adam Ben Charlie Score c 4
  • 为 R 中具有相同符号的连续数字的每个范围分配一个值

    我正在尝试创建一个数据框 其中存在一列 该列保存表示正数和负数的运行长度的值 如下所示 Time V Length 0 5 2 1 5 1 0 1 1 5 1 5 0 0 0 2 0 2 1 0 2 5 0 0 0 3 0 1 1 75 3
  • PHP exec() 未在输出中返回错误消息

    我正在尝试以 XML 格式获取 svn 命令的某些输出 当我输入有效参数时输出正常 但是 当我输入错误的密码时 输出不会显示错误消息 这是 PHP 代码 exec usr bin svn username something passwor
  • Laravel 4 分页计数

    我在我的特定视图 站点中设置了分页 并且它有效 问题是我有一个 php 计数器 foreach players as player tr td count td 每当我切换页面时 它都会从 1 开始 我怎样才能改变这一点 为了实现这一点 您
  • Selenium 不使用 InternetExplorerDriver 单击按钮的解决方法

    我在网页上有一个按钮 当我通过 IE 运行时 Webdriver 不会单击该按钮 我已经尝试了以下解决方法 但没有成功 通过 JavaScript 点击 JavascriptExecutor driver executeScript arg
  • 在 C 中使用 strncpy 更有效地复制 n 个字符

    我想知道是否有一种更干净 更有效的方法来执行以下操作strncpy考虑到max字符数 我觉得自己做得太过分了 int main void char string hello world foo int max 5 char str mall
  • 从类访问 LocationManager/ LocationListener

    我有点迷失在这里 在我的主要活动中 我注册了一个 LocationManager 并将其连接到 LocationListener 以使用 myLocation getLatitude 等 现在我需要使用另一个类中的 Location 方法
  • 数据注释或应用程序验证块

    DataAnnotations 和应用程序验证块有什么区别 DataAnnotations 是一个基于属性的模型 用于 注释 数据 它位于 NET 框架本身中 它最明显的用途是验证 例如 ASP NET MVC 所做的那样 Validati
  • biglm 和 lm 之间的 AIC 不同

    我一直在尝试使用 biglm 在大型数据集 大约 60 000 000 行 上运行线性回归 我想用AIC来进行模型选择 然而 当我在较小的数据集上使用 biglm 时 我发现 biglm 返回的 AIC 变量与 lm 返回的变量不同 这甚至
  • 如何确定隐藏/溢出文本是在元素的顶部还是底部

    我想扩展 Shog9 的答案 如何从javascript判断html元素是否有溢出内容 https stackoverflow com questions 143815 how to determine from javascript if
  • SQL 查询忽略相邻的匹配行

    我有一个活动表 其中包含各种活动和哈希值 actorEntity subjectEntity activity type 在某些情况下 用户可能会在几秒钟内执行完全相同的活动两次 这意味着数据库中会有两个相邻的行具有完全相同的数据 对于某些
  • Objective-C 中的“isa”变量是否等于 Java 中的“instanceof”

    简单的问题 Objective C 中的 isa 实例变量提供与 Java 中的 instanceof 运算符相同的功能是否公平 这些是不同的概念 一个是一个member一个结构体 而另一个是一个operator 模仿严格的解释instan
  • 如何创建一个仅在其类型具有特定成员函数时才编译的类? [复制]

    这个问题在这里已经有答案了 我有一个名为has f我希望它只接受具有以下内容的模板参数f成员函数 我该怎么做呢 这是我尝试过的 template
  • 在 Ruby 中将转义的 unicode (\u008E) 转换为重音字符 (Ž)?

    我对此感到非常困难 contained within MA u008EEIKIAI should be MA EIKIAI nature of string p string3 MA u008EEIKIAI puts string3 MAE
  • 使用 LAPACK 访问子矩阵

    LAPACK 中有一个函数可以给我特定子矩阵的元素吗 如果是的话 C 的语法是什么 或者我需要编码吗 没有用于访问子矩阵的函数 然而 由于 LAPACK 例程中矩阵数据的存储方式 您不需要它 这节省了大量的复制工作 并且 部分 选择了数据布