Matlab大数据处理1:Matlab内存映射文件

来源:互联网 发布:级域名泛解析多久生效 编辑:程序博客网 时间:2024/04/19 20:07

       在maltab程序中,经常需要读取一些.mat格式的数据文件,如果文件非常大,内存装不下或者加载时间过长,我们可以通过matlab提供了内存映射文件机制(memroy mapped file)[1]来解决这一问题。内存文件映射是一种内存管理方法,应用程序可以通过内存指针对磁盘上的文件进行访问,从而不需要预先将整个文件加载到内存中去。

        Matlab内存映射文件的语法格式如下:

        m = memmapfile(filename)

        m = memmapfile(filename, prop1, value1, prop2, value2, ...)

        memmapfile(filename)创建了一个默认参数的内存映射文件,而m = memmapfile(filename, prop1, value1, prop2, value2, ...)创建一个指定参数的内存映射文件,参数设置见下表1,最后一列Default表示参数默认值,其中Repeat属性中的inf表示顺序读取文件直至文件末尾,映射的内存数据可通过m.Data属性来访问

                      表1. Matlab memmapfile参数列表

      

           调用示例:

           首先创建一个5000*1维的double数组并保存,gallery是一个maltab测试函数,返回给定参数的测试数组。

randData = gallery('uniformdata', [5000, 1], 0, 'double');fid = fopen('records.dat','w');fwrite(fid, randData, 'double');fclose(fid);

Example 1 创建默认内存映射文件

m = memmapfile('records.dat');

Example 2 创建指定参数的内存映射文件

    设置offset、Format和Writeble属性,,注意最后得到了一个9744*1的uint32数组,总共是38976字节,加上offset刚好等于5000个double数组的总字节数。

m = memmapfile('records.dat',         ...               'Offset', 1024,        ...               'Format', 'uint32',    ...               'Writable', true);

Type the object name to see the current settings for all properties:

m =    Filename: 'd:\matlab\records.dat'    Writable: true      Offset: 1024      Format: 'uint32'      Repeat: Inf        Data: 9744x1 uint32 array

Example 3 映射对象

       将record.dat文件映射成对象,该对象拥有一个4*10*8 uint32数组成员,变量名为x,,可以通过m.Data(*).x进行访问,*表示index.

m = memmapfile('records.dat',    ...               'Offset', 1024,   ...               'Format', {'uint32' [4 10 18] 'x'});A = m.Data(1).x;whos A  Name      Size                     Bytes  Class  A        4x10x18                   2880   uint32 array

Example 4 映射复杂对象

        复杂对象拥有model,serialno,expenses三个属性,读取1000次。

m = memmapfile('records.dat',                   ...               'Format', {                      ...                  'int16'  [2 2] 'model';       ...                  'uint32' [1 1] 'serialno';    ...                  'single' [1 3] 'expenses'},   ...               'Repeat', 1000);

[1] Matlab MemoryMapped File

原创粉丝点击