一直搞不懂什么是矩阵的行优先和列优先存储,现在在看Eigen的tutorial,里面详细的解释了什么是行优先和列优先,在这里做下笔记。
行优先和列优先存储
我们随便找一个矩阵来说明吧,比如说如下的矩阵a:
1, 3, 5
4, 2, 6,
7, 8, 9
我们都知道,这是一个3行3列的矩阵,但是在计算机内存里存储的时候,是线性的存储,也就是说所有矩阵的元素都被存储到了一行。
如果是行优先存储,那么矩阵a在内存里是这么存储的1,3,5,4,2,6,7,8,9。如果使用的是列优先存储,那么矩阵a在内存里是这么存储的1,4,7,3,2,8,5,6,9。
Eigen代码
我们可以用Eigen代码来解释上面的例子。data()函数返回矩阵第一个元素的地址。
#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;
using namespace std;
int main()
{
Matrix<