【问题标题】:MATLAB - How to load and handle of a big TXT file (32GB)MATLAB - 如何加载和处理大型 TXT 文件 (32GB)
【发布时间】:2014-06-03 18:34:35
【问题描述】:

首先,对不起我的英语......

我想知道加载和处理大 TXT 文件(大约 32GB,矩阵 83.000.000x66)的更好方法。我已经用 TEXTSCAN、IMPORT (out of memory)、fgets、fget1,.... 尝试了一些实验,除了 import 方法,所有方法都有效,但需要很长时间(超过 1 周)。

我的目标是使用这个数据库来执行我的抽样过程,然后是一个用于学习行为的神经网络。

有人知道如何更快地导入此类数据吗?我正在考虑以其他格式(而不是 TXT)进行数据库转储,例如 SQL 服务器,并尝试处理通过查询访问数据库的数据。

其他疑问,加载所有数据后,我可以保存为 .MAT 格式并在我的实验中处理这种格式吗?其他更好的主意?

提前致谢。

【问题讨论】:

    标签: matlab file memory import bigdata


    【解决方案1】:

    在您的工作区/内存中不可能保存如此大的矩阵(5,478,000,000 个值)(除非您有大量的内存)。所以文件格式(.mat 或 .csv)无关紧要! 您绝对必须使用数据库(或将文件拆分为多个较小的文件并逐步计算(也需要很长时间)。

    就我个人而言,我只对 sqlite3 有过经验,并且对 1.47mio x 23 矩阵/csv 文件做了类似的事情。 http://git.osuv.de/markus/sqlite-demo(请记住,我的 csv2sqlite.m 只是设计为使用 GNU Octave [夜间 19k 秒......好吧,它的脚本也很糟糕 :) ]。 将所有内容导入 sqlite3 数据库后,我只需在 8-12 秒内访问我需要的数据(查看leistung.m 的评论标题)。

    如果你的 csv 文件是直接的,你可以简单地用 sqlite3 本身导入它 例如:

    ┌─[markus@x121e]─[/tmp]
    └──╼ cat file.csv 
    0.9736834199195674,0.7239387515366997,0.3382008456696883
    0.6963824911102146,0.8328410999877027,0.5863203843393815
    0.2291736458336333,0.1427739134201017,0.8062332551565472
    ┌─[markus@x121e]─[/tmp]
    └──╼ sqlite3 csv.db
    SQLite version 3.8.4.3 2014-04-03 16:53:12
    Enter ".help" for usage hints.
    sqlite> CREATE TABLE csvtest (col1 TEXT NOT NULL, col2 TEXT NOT NULL, col3 TEXT NOT NULL);
    sqlite> .separator ","
    sqlite> .import file.csv csvtest
    sqlite> select * from csvtest;
    0.9736834199195674,0.7239387515366997,0.3382008456696883
    0.6963824911102146,0.8328410999877027,0.5863203843393815
    0.2291736458336333,0.1427739134201017,0.8062332551565472
    sqlite> select col1 from csvtest;
    0.9736834199195674
    0.6963824911102146
    0.2291736458336333
    

    使用https://github.com/markuman/go-sqlite 完成所有操作(Matlab 和 Octave 兼容!但我想除了我之外没有人使用过它!) 但是,我建议在coop 模式下运行的分支 2 (git checkout -b 2 origin/2) 中的版本 2-beta(您将在ego 模式下达到 sqlite3 的最大字符串长度)。版本 2 也有一个 html doku。 http://go-sqlite.osuv.de/doc/

    【讨论】:

    • 感谢您的回答。我将尝试直接从数据库访问中处理这个问题。
    猜你喜欢
    • 2015-02-19
    • 1970-01-01
    • 2019-08-14
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    相关资源
    最近更新 更多