首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用lda了解Lapack_row_major和Lapack_col_major

使用lda了解Lapack_row_major和Lapack_col_major
EN

Stack Overflow用户
提问于 2016-01-10 04:29:04
回答 2查看 3.1K关注 0票数 6

关于lapack_row_major和lapack_col_major,我有三个问题:

1)我的理解是否正确:如果A= 1,2,3,4,5,6,维数为2*3,则lapack_row_major结果为[ 1,2,3,4,5,6 ],而lapack_col_major结果为[ 1,3,5,2,4,6 ]?

2)当我想将A传递给一个函数时,我选择row_major或col_major中的哪一个重要吗?

3) lapack_row_major和lda (数组的前导维数)有什么关系?如果我想将一个lapack_row_major格式的m*n矩阵A传递给一个函数,那么它的lda就是n,这是真的吗?如果我将A作为lapack_col_major传递,那么它的lda是m?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2016-08-05 21:59:26

这些概念在LAPACK和LAPACKE文档中如此不透明,这真是太糟糕了。供参考:

对于LAPACK_{ROW,COL}_MAJOR:http://www.netlib.org/lapack/lapacke.html#_array_arguments

对于LD参数:http://www.netlib.org/lapack/lug/node116.html

所以,为了回答你的问题:

  1. 你在正确的轨道上,但是你还需要另外一条信息(形状)。

LAPACKE (LAPACK的C接口)使用LAPACK_{ROW,COL}_MAJOR来确定您传递的内存块(通过C中的指针)是否引用了按主要行(一行的所有内容在下一行之前)或列主要部分(一列的所有内容在下一列之前)组织的内存。还要注意的是,这些概念用row -->“最外层维度”和col -->“最内层维度”来概括(对于多于2D的数组)。

一个补充说明:C使用行主存储,而Fortran使用列主存储。在两个系统之间交谈时,您需要进行翻译,或者乐于使用转置。下面有更多关于这一点的内容。

因此,LAPACK值决定了对内存的解释,但是您仍然需要告诉LAPACK_{ROW,COL}_MAJOR /E例程有关形状的信息(通过一个在LAPACK和LAPACKE中通常称为int N的参数)。

所以,你的A数组1,2,3,4,5,6

代码语言:javascript
复制
// interpreted as row-major, 2 rows, (note: LDA=3)
A = [[1,2,3],  // a 2x3 matrix
     [4,5,6]]

// interpreted as row-major, 3 rows (note: LDA=2)
A = [[1,2],    // a 3x2 matrix
     [3,4],
     [5,6]]

// interpreted as col-major, 2 col (note: LDA=3)
A = [[1, 4]    // a (different) 3x2 matrix
     [2, 5]
     [3, 6]]

另请注意,如果您正在编写C代码,则为填充数组常量而输入的数据将以行为主的顺序放入内存中。如果您将数据“原样”传递给LAPACK/E,但是设置了LAPACK_COL_MAJOR,那么您将有效地处理数组转置(如果您设置了适当的int Nint LDA)。

  1. 是。是的,c。列数。

这看起来有点令人困惑。为什么是c?好吧,原因之一是,我们已经从int N参数中知道了行数。那么,下一个问题是“为什么这个论点不是叫做nCols,或者类似的东西?”

原因是:我们可能会使用一些比c更大的值来只选择数组的一部分。例如,如果我们让LDA = 2 * c,我们最终将在LAPACK例程中使用“每隔一行”--因为当我们说“按LDA数量前进以获得下一件事”时,事情将等同于向前跳跃并跳过一行。

注意与LAPACK文档术语的相似性:前导维度(LDA中的LD )。

对于以行为主的数据,这本质上回答了这样一个问题:“我需要向前移动多少个元素才能从行i移到行i+1。非标准LDA (即LDA != c)将回答一个略有不同的问题。

如果你有主要的列数据,LDA将需要是r,行数(除非你正在做一些奇特的事情)。这里等价的问题是“我需要向前移动多少个元素才能从col i到col i+1

票数 9
EN

Stack Overflow用户

发布于 2016-09-09 10:35:20

要进一步返回MrDrFenner:

与3的关系以及lda如何确定1的形状:http://www.netlib.org/utk/forums/netlib/messages/272.html

对于2,这取决于你在做什么。例外情况可能是本征值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34698550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档