.mat
您可以从具有多个变量的文件中加载特定变量。但是,我认为您不能只从 MATLAB 的变量中加载一组任意索引。
也就是说,如果您的问题属于您只需要访问特定行/列的类型,那么我可能会为您提供解决方法。
您可以从矩阵创建一个struct
,将每列作为单独的字段,然后.mat
使用选项保存文件,-struct
以便将每个字段保存为单独的变量。这样,你就可以拿出你想要的那个。
dummy=randn(100,200);%# this is a test matrix
[dim1,dim2]=size(dummy);
dummyCell=mat2cell(dummy,dim1,ones(dim2,1));%# create a cell from the matrix
fieldNames=strcat(repmat({'col'},1,dim2),cellfun(@num2str,mat2cell(1:dim2,1,ones(dim2,1)),'UniformOutput',false));%# generate fieldnames for the struct
dummyStruct=cell2struct(dummyCell,fieldNames,2);%# create the struct
save('myDummyFile','-struct','dummyStruct')
我不知道直接将矩阵转换为结构的方法。因此,您首先将每一列拆分为单元格(排序是因为您指出您需要访问这些列。如果您需要行,则必须进行切换)。这是在单元格中dummyCell
。现在要保存到结构,我们需要生成字段名称。这是在字符串单元格中fieldNames
。它生成表单的字段名称col1
,col2
等等...如果需要,您可以将其命名为有意义的名称。然后我们通过将每个单元格分配给相应的字段名称来将 转换cell
为 a 。struct
最后使用选项保存 mat 文件,该-struct
选项告诉 MATLAB 将每个字段保存为单独的变量。所有这些都应该在您的程序保存巨大的 mat 文件时完成。现在,如果您需要访问,请说col52
,你需要做的就是load('myDummyFile','col52')
。如果需要,您还可以加载多个。
请记住,如果您对索引要求(即每行/每列)有一个顺序,如果您需要访问矩阵中的任意索引,这将很有效,那么这将不起作用。创建单元/结构并保存它时可能会有一些相关的开销。但是,如果您只保存一次,但经常访问,这将得到回报。
如果您的矩阵很大(按照今天的标准,500x250000 并不是那么大),您必须注意这种方法的内存问题,因为我们将整个矩阵复制到一个单元格和结构中。我一步一步地编写它,以便更清楚地理解,但是您可以通过创建一个单元格dummy
并将其分配给自身来减少重复,对于结构也是如此。但是,这只会将副本数量减少 1,因为 Matlab 仍然必须将变量复制到内存中以在操作后分配给自身。