我有一个数据文件(6.3GB),我试图在MATLAB中工作,但我无法加载它,我认为这可能是一个内存问题。我试过加载一个较小的"样本"文件(39MB),这似乎工作,但我的实际文件根本不会加载。这是我的代码:
filename = 'C://Users/Andrew/Documents/filename.mat';
load(filename);
??? Error using ==> load
Can't read file C://Users/Andrew/Documents/filename.mat.
exist(filename);
EDU>> ans = 2
好吧,至少文件存在。当我检查记忆......
memory
Maximum possible array: 2046 MB (2.146e+009 bytes) *
Memory available for all arrays: 3442 MB (3.609e+009 bytes) **
Memory used by MATLAB: 296 MB (3.103e+008 bytes)
Physical Memory (RAM): 8175 MB (8.572e+009 bytes)
* Limited by contiguous virtual address space available.
** Limited by virtual address space available.
因为我有足够的RAM,我是否需要增加最大可能的数组大小?如果是这样,如何在不增加RAM的情况下实现这一目标?
系统细节:我正在运行64位Windows,8GB RAM,MATLAB版本7.10.0.499(R2010a)。我认为自从我获得学生执照后,我无法更新到新版本。
答案 0 :(得分:0)
由于尺寸可能是问题所在,您可以尝试load('fileName.mat', 'var1'); load('fileName.mat', 'var2');
等。为此,您必须知道变量名称。
答案 1 :(得分:0)
一个选项是使用matfile对象直接加载/索引到文件中,而不是加载到ram中。
doc matfile
但是一个限制是您无法直接索引到结构中。因此,您需要找到一个朋友来转换mat文件中的结构并使用版本选项
保存它save(filename, variables, '-v7.3')
答案 2 :(得分:0)
您可以使用load part of variables from mat file按部分加载数据以执行您的操作。你必须有matlab 7.3或更新版本。
答案 3 :(得分:-1)
从您的文件路径我可以看到您正在使用Windows。对于Windows和Linux,Matlab只有32位(对于这些操作系统没有64位至少对于旧版本,请参阅我的编辑),这意味着你的总数限制为<4GB ram单个应用程序(无论您的系统有多少),这是一个32位应用程序问题,因此您无法采取任何措施来解决它。有趣的是,Mac版本是64位,您可以根据需要使用尽可能多的内存(在我的计算机视觉类中,我们经常使用我的mac来完成我们的大型视频项目,因为Windows机器只会说&#34;内存不足&#34; )
从内存输出中可以看出,矩阵存储总共只有~3.4GB,这远远小于6.3GB文件。您还会注意到,对于一个特定的矩阵,您只能使用~2GB(当您使用更多内存时,该数字会发生变化)。
通常,在处理大型文件时,您可以逐行读取文件,而不是将整个文件加载到内存中。但由于这是.mat
文件,可能无法正常工作。如果文件包含多个变量,则可以将它们分别放入各自足够小的文件中以加载
此处的带回家信息是您无法立即读取整个文件,除非您跳到具有足够RAM的Mac上。即便如此,单个矩阵的大小仍可能小于6.3GB
修改强>
截至2014年see here,所有操作系统的当前Matlab 学生版本均可以64位购买,因此较新版本的Matlab 可能允许您阅读整个文件一次。我还应该补充说,2014年之前有一个64位版本,但不是学生许可证