精华内容
下载资源
问答
  • 优先存储和列优先存储

    万次阅读 2017-07-08 21:02:51
    一直搞不懂什么是矩阵的行优先和列优先存储,现在在看Eigen的tutorial,里面详细的解释了什么是行优先和列优先,在这里做下笔记。行优先和列优先存储我们随便找一个矩阵来说明吧,比如说如下的矩阵a:1, 3, 5 4, 2, ...

    一直搞不懂什么是矩阵的行优先和列优先存储,现在在看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 3
    4 5 6
    In memory
    1
    4
    2
    5
    3
    6
    1 2 3
    4 5 6
    In memory
    1
    2
    3
    4
    5
    6

    可以看出,相同的矩阵在内存里被不同的存储方式存放了。

    如何选择使用哪种存储方式?

    对于行优先遍历的,使用行优先存储,对于列优先遍历的,使用列优先存储。Eigen默认使用列优先存储。

    展开全文
  • 矩阵的按行优先存储和按列优先存储 a = 1 2 3 4 5 6 7 8 9 行优先:[[123][456][789]] 列优先:[[147][258][369]] 行优先或列优先看需求

    矩阵的按行优先存储和按列优先存储
    a = 1 2 3
    4 5 6
    7 8 9
    行优先:[[123][456][789]]
    列优先:[[147][258][369]]
    行优先或列优先看需求

    展开全文
  • 优先存储与列优先存储

    千次阅读 2020-02-10 16:38:26
    今天在做章习题时,发现自己对行优先和列优先并没有弄得特别明白,先说一下差不多的这两道关于它的题吧...若M按行优先方式存储,元素M[8][5]的起始地址与当M按列优先方式存储时的(3)元素的起始地址一致。 (1):540 (2...

    按行优先存储与按列优先存储详解

    今天在做章习题时,发现自己对行优先和列优先并没有弄得特别明白,先说一下差不多的这两道关于它的题吧,今天下午我终于把它整明白了(流下了辛酸的泪水)。

    二维数组M的成员是6个字符(每个字符占一个存储单元)组成的串,行下标i的范围为0到8,列下标j的范围为1到10,则存放M至少需要(1)字节;M的第8列和第5行共占(2)字节;若M按行优先方式存储,元素M[8][5]的起始地址与当M按列优先方式存储时的(3)元素的起始地址一致。
    (1):540
    (2):108
    (3):M[3][10]

    解:
    (1):9行10列是9乘10=90个,应有90*6=540个存储单元

    (2):应有9+10=19个,19*6=114,但是在第8列与第5行交叉部分多算了一个所以要减掉,最后114-6=108

    (3):假设先不算字符,M[8][5]的起始地址是8*10+5-1=84

    注意如果行列均从1开始,按行优先起始地址=基地址+((i-1)*n+j-1)*p

    按列优先起始地址=基地址+((j-1)*m+i-1)*p

    但是这里行从0开始

    它前面有85个元素,先求列数,一列有9个元素,85/9=9,85%9=4,故85=9*9+4=(10-1)+4,为第4行10列,但是行从0开始
    所以为M[3][10]

    数组A中,每个元素的存储占3个单元,行下标i为1到8,列下标j为1到10,从首地址SA开始连续存放在存储器内,存放该数组至少需要的单元个数是(1);若该数组按行存放,元素A[8][5]的起始地址是(2);若按列存放,起始地址是(3)。
    (1):240
    (2):SA+222
    (3):SA+117

    解:
    (1):8乘10乘3=240
    (2):代入上面公式可得为SA+222
    (3):注意:这里已经给出元素,而不是求对应元素
    所以代入上面公式就可以算出为SA+117

    重要的点:

    1. 公式按照理解记清
    2. 读清题目看明白题目要求
    3. 注意列行起始位置
    4. 计算清楚,不要马虎
    5. 思维也要清晰
    展开全文
  • 因为计算机存储空间是先后有序的,如何存储A[m*n]的m*n个元素是个问题,一般有两种:按行优先存储和按列优先存储。 row-major:存成a11,a12,...,amn的顺序。 PASCAL, C/C++,, Python语言中,数组按行优先顺序...
    涉及到在计算机中使用矩阵时,首先会碰到存储矩阵的问题。因为计算机存储空间是先后有序的,如何存储A[m*n]的m*n个元素是个问题,一般有两种:按行优先存储和按列优先存储。
    
    
    row-major:存成a11,a12,...,amn的顺序。
         PASCAL, C/C++,, Python语言中,数组按行优先顺序存储。
         行优先顺序推广到多维数组,可规定为先排最右的下标。
    column-major:存成a11,a21,...,amn的顺序。
        FORTRAN语言,Matlab中,数组按列优先顺序存储。
    
        列优先顺序推广到多维数组,可规定为先排最左的下标。
    
    
    For example:
    序列 A = [1,2,3,4],用Matlab 和 Python 分别reshape为2*2大小:
    Matlab中 reshape(A, [2 2]), 得到 [[1 3] [2 4]]
    Python中 A.reshape(2,2),    得到[[1 2] [3 4]]
    
    
    
    

    Ref:

    http://en.wikipedia.org/wiki/Row-major_order

    http://www.cnblogs.com/soroman/archive/2008/03/21/1115571.html

    展开全文
  • mwArray为列优先存储

    2020-09-11 15:11:56
    为3行2列的矩阵,向其中存储数据时需要用到SetData函数,存储时为列优先存储。示例如下: // ConsoleApplication2.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "mclcppclass.h" int main...
  • 行列优先存储与循环

    千次阅读 2014-08-10 10:23:17
    对于一个二维数组A[m][n],在计算机内存中有两种存储方式:行优先存储和列优先存储
  • 三维数组A[n][m][k],n,m,k三个分量分别称之为行...三位数组按行优先存储在内存空间中的存储方式为: 首先将第一行第一列的页存满,再存第一行第二列的页,直到第一行存满后再存下一行。 转载于:https://www.cnblo...
  • 掌握Android Studio的三种数据存储方式,能够根据需要保存的数据特性选择适当的方法存储数据。 以文件形式保存到虚拟机的sd卡中,并能读取已经保存过的文本信息。 保存函数: public void svae(View V){ ...
  • 共享优先存储: publicvoid onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); EditText e = (EditText) findViewById(R...
  • 本篇介绍Eigen中矩阵及二维数组的系数存储顺序--行优先及列优先,已经如何指定优先顺序。 行优先(row-majoe)、 列优先(column-majoe) 矩阵的系数条目组成了一个二维的结构,在内存内存储矩阵时,必须以某种结构来...
  • ADO.Net 实体模型映射的储存过程方法返回值int是返回的受影响的行数。我应该怎么使用EF来获取return值? ExecuteFunction方法的 参数类型是ObjectParameter,不能像SqlParamter那样指定ParameterDirection。...
  • 行,列优先存储

    2011-07-07 10:56:37
    System.out.println("行优先存储"); for(i=0;i;i++){ for(j=0;j;j++){ rowData[i*4+j]=data[i][j]; } } System.out.println("列优先存储"); for(i=0;i;i++){ for(j=0;j;j++){ colData[j*...
  • 已知有两个双字长度的数DATA1和DATA2,要求用8086汇编语言编程实现两数相加,并将结果存放在RESULT中,采用高地址优先存储结果(如1234H,5678H表示56781234H)。程序的数据段部分已给出,要求补充完整程序,实现上述...
  • 图像的四叉树广度优先存储

    千次阅读 2013-12-18 12:01:48
    #include #include #include #include #include #include #include #include using namespace std; typedef struct quardresult_t {  int seq;  char val; }QuadResult; ...typedef en
  • #include #include "QuadTree.h" #include #include #include #include #include #include #include using namespace std; typedef struct structQTree QTree; struct structQTree { unsigned char pixel;
  • package com。wrh.lab.dataStructure.arrayAndGenericTable;/** * test the array convert * @author wrh * */public class ArrayConvert { public static void main(String[] args) { int[][] data = {...
  • 题目:假设按行优先存储整数数组A[9][3][5][8]时,第一个元素的字节地址是100,每个整数占4个字节。问下列元素的存储地址是什么? (1) a0000 (2) a1111 (3) a3125 (4) a8247
  • 思路:重写SQLiteOpenHelper getWritableDatabase和getReadableDatabase方法,子类继承实现 package com.c35.mtd.oa.database; import java.io.File; import android.content.Context;...
  • 矩阵的存储优先顺序

    千次阅读 2015-03-25 11:48:54
    1、按行优先存储 : 存成a11,a12,...,amn的顺序。  PASCAL, C/C++,, Python语言中,数组按行优先顺序存储。  行优先顺序推广到多维数组,可规定为先排最右的下标。 2、按列优先存储 存成a11,a21,...,amn...
  • 邻接表存储图深度优先广度优先遍历
  • 邻接矩阵存储图的深度优先遍历 试实现邻接矩阵存储图的深度优先遍历。 函数接口定义: void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) ); 其中MGraph是邻接矩阵存储的图,定义如下: typedef struct ...
  • 图的存储算法以及深度优先和官渡优先的实现。 图的存储与遍历 1.读取文件data中图的信息 2.创建图->临接矩阵 3.输出顶点以及临接矩阵 4.将临接矩阵存储转换为临接表存储 5.输出临接表 6.输出深度优先搜素结果 7.输出...
  • C++编写的图的存储与深度优先与广度优先遍历
  • 按高下标优先存储方式(以最右的下标为主序),顺序列出数组A2×2×3×3中所有元素aijkl,为了简化表达,可以只列出(i,j,k,l)的序列。 我们分别用按高下标优先和低下标优先存储方式来做一下 最右下标存...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,350
精华内容 3,340
关键字:

优先存储