行优先存储和列优先存储
来源:互联网 发布:贵州浪人网络投诉 编辑:程序博客网 时间:2024/05/22 00:43
一直搞不懂什么是矩阵的行优先和列优先存储,现在在看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<int, 2, 3, ColMajor> Acolmajor; // Acolmajor << 8, 2, 2, 9, // 9, 1, 4, 4, // 3, 5, 4, 5; Acolmajor << 1, 2, 3, 4, 5, 6; cout << Acolmajor << endl; cout << "In memory" << endl; for (int i = 0; i < 6; i++) cout << *(Acolmajor.data() + i) << endl; Matrix<int, 2, 3, RowMajor> Arowmajor; Arowmajor << 1, 2, 3, 4, 5, 6; cout << Arowmajor << endl; cout << "In memory" << endl; for (int i = 0; i < 6; i++) cout << *(Arowmajor.data() + i) << endl;}
结果为:
1 2 34 5 6In memory1425361 2 34 5 6In memory123456
可以看出,相同的矩阵在内存里被不同的存储方式存放了。
如何选择使用哪种存储方式?
对于行优先遍历的,使用行优先存储,对于列优先遍历的,使用列优先存储。Eigen默认使用列优先存储。
阅读全文
0 0
- 行优先存储和列优先存储
- 矩阵的存储顺序:按行优先存储 vs. 按列优先存储
- 行优先和列优先的问题
- 行优先和列优先的算法
- 图邻接表存储 深度优先和广度优先遍历
- 图的存储以及深度优先和广度优先
- 列优先与行优先
- 列优先与行优先
- 行存储和列存储
- 行存储和列存储
- 行列优先存储与循环
- 矩阵的存储优先顺序
- 【图】图的邻接矩阵存储和广度、深度优先遍历
- 【图】图的邻接表存储和广度优先遍历
- 邻接表存储图,深度和广度优先遍历
- SharedPreferences共享优先存储的详细解析和原理
- 图的深度优先和广度优先遍历算法(用邻接表作为存储结构)
- 数据结构--图--图的数组存储表示,深度优先搜索遍历和广度优先搜索遍历
- POJ3469 Dual Core CPU 【最大流最小割】
- Android实现自定义自画的图片的Button
- [线段树][单调栈]HackerRank 101 Hack 50 .Boxes for Toys
- 水题 第一站 精挑细选
- 网页插入视频&用图片做超链接
- 行优先存储和列优先存储
- selenium中级教程
- Android Percentlayout百分比布局
- Hadoop基础教程-第9章 HA高可用(9.2 HDFS 高可用配置)(草稿)
- 洛谷 红魔馆OI 妖梦斩木棒
- centos7.2使用rpm安装jdk8
- html第二天的学习
- TCP协议特点和3次握手
- POJ 1416 Shredding Company <DFS>