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

  • 相关阅读:
    Hive on Spark
    Mongodb添加副本及修改优先级
    RabbitMQ与Spring集成
    最简单的图文教程,几步完成Git的公私钥配置
    Idea Ant 打开发包
    Spring Web 项目Junit测试报错问题
    阿里云maven仓库地址,速度提升100倍
    Spring boot 学习
    JAVA开发常用工具包
    从无到有搭建SSM框架
  • 原文地址:https://www.cnblogs.com/crossing/p/4027463.html
Copyright © 2011-2022 走看看