matlab如何很好的处理比较大的数据?

理由
举报 取消

我在用matlab导入数据的时候,一共5万条记录的csv文件,如果只有两个变量共2兆左右时,2秒钟就成功搞定了,但是如果有1000多个变量时,数据约50兆,一旦运行读取程序电脑就会死机。而同样的数据用R语言约10s就搞定了。修改一下:有点失误,两个变量的数据为几百k,链接:http://pan.baidu.com/s/1c1lbLAg 密码:oz5r ,相应的R语言程序:# 读取数据trainy <- read.csv(“train_y.csv”)trainx <- read.csv(“train_x.csv”)相应的Matlab程序:trainy = csvread(‘train_y.csv’,2,0);另一个数据用程序和导入工具箱都会电脑死机————————————————————————今天发现一个新函数readtable(‘train_x.csv’);直接搞定了readtable(‘train_x.csv’);

2018年1月12日 4 条回复 1502 次浏览

发起人:宇智波带土 初入职场

学生

回复 ( 4 )

  1. Falccm
    理由
    举报 取消

    你的数据格式什么样的?为什么两个变量是2M,1000多个变量才50M?你的读取程序怎么写的?

    最好把文件发出来吧,50M上传网盘应该不麻烦

    更新:

    看了你发的文件,你的train_x.csv中的数据中有带引号的,csvread应该是不能读取的,下边是两种读取方法:

    第一种是比较正常的读取方法,用textscan读取:

    fid = fopen('train_x.csv');
    data = textscan(fid,'','delimiter',',"',...
        'MultipleDelimsAsOne',1,'CollectOutput',1,'HeaderLines',1);
    fclose(fid);
    data = data{1};
    
  2. George Feng
    理由
    举报 取消

    使用datastore()读取

    环境:Matlab2015b, Win10x64, i3, 8G, SSD

    耗时:7.2s

    代码:

    clear;clc;
    
    tic
    RecName = 'train_x.csv'; % 设定文件名称,支持csv/txt等格式
    RecStore = datastore(RecName,'ReadVariableNames',true); % 设定是否读取变量名
    RecStore.Delimiter = ','; % 设定分隔符
    RecStore.NumHeaderLines = 1; % 设定首行行数,如果第一行也是数据就生成0
    RecStore.ReadSize = 'file'; % 设定读取规模
    
    
    RecTab = readall(RecStore); % 读取数据
    toc
    
  3. MueRYX
    理由
    举报 取消

    csv这个格式是比较好的,新版支持mapreduce,用起来相当方便。大文件,一般采用分块的方法读取,textscan,支持。

    总体思路就是拆分,计算,合并,其实就是mapreduce,2015b自动可以采用开启配置好的集群。

  4. 捉木马的蓝胖纸
    理由
    举报 取消

    循环变矩阵运算。

    多核并行计算。

我来回答

Captcha 点击图片更换验证码