在您的工作区/内存中不可能保存如此大的矩阵(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/