zoukankan      html  css  js  c++  java
  • MATLAB基础知识之内存映射

    如果我们的文件太大而不能一次性加载进内存,我们可以创建一个memmapfile对象,这样可以将原始数据当做数组一样来访问,并且同样的通过下标访问数据。

    用MNIST数据()举个例子:

    [Xtrain, ytrain, Xtest, ytest] = setupMnist('keepSparse', false);
    whos('Xtrain', 'ytrain', 'Xtest', 'ytest');
    结果:
    Name            Size                 Bytes  Class     Attributes
    
      Xtest       10000x784             62720000  double              
      Xtrain      60000x784            376320000  double              
      ytest       10000x1                  80000  double              
      ytrain      60000x1                 480000  double              
    下面呢,我们把数据存储类型修改为int16和int8,因为double数据类型访问速度要比int类型的慢,而且需要内存更多。。
    fname = fullfile(tempdir(), 'mnist.dat');
    fid = fopen(fname, 'w');
    fwrite(fid, Xtrain, 'int16');
    fwrite(fid, ytrain, 'int8');
    fwrite(fid, Xtest,  'int16'); % max int16 value is 32767
    fwrite(fid, ytest,  'int8');  % max int8 value is 127
    fclose(fid);
    好,现在我们在临时文件夹中创建了一个mnist.dat文件。
    mmap = memmapfile(fname, 'Writable', true, 'Format', ...
        {'int16', size(Xtrain), 'Xtrain';
        'int8',  size(ytrain), 'ytrain';
        'int16', size(Xtest),  'Xtest';
        'int8',  size(ytest),  'ytest';
        });
    创建一个memmapfile文件,memmapfile函数的使用:

    现在我们可以访问这个数据了:
    tic
    X4000 = mmap.Data.Xtrain(4000, :); % 1x784
    y4000 = mmap.Data.ytrain(4000);
    toc
    我们发现需要的时间为
    Elapsed time is 0.315341 seconds.
    但是一旦把这块数据加载到内存了,再访问一次
    发现时间变为
    Elapsed time is 0.004710 seconds.

    好了,现在我们可以像一般数据一样来操作这个数据;
    例如赋值:
    mmap.Data.Xtrain(1, 30:35) = 255;

    求均值:
    xbar = mean(mmap.Data.Xtest, 2);

    最后别忘记clear该块数据
    clear mmap
    delete(fname);

    Reference:

    http://ubcmatlabguide.github.io/html/files.html

  • 相关阅读:
    CSUST 8.4 早训
    CSUST 8.5 早训
    hdu1542 Atlantis 线段树--扫描线求面积并
    hdu1540 Tunnel Warfare 线段树/树状数组
    hdu1535 Invitation Cards 最短路
    hdu1358 Period KMP
    SQL Server 向数据库中创建表并添加数据
    初次实践数据库--SQL Server2016
    hdu1301 Jungle Roads 最小生成树
    hdu1281 棋盘游戏 二分图最大匹配
  • 原文地址:https://www.cnblogs.com/crossing/p/4027463.html
Copyright © 2011-2022 走看看