您可以从包含多个变量的.mat 文件中加载特定变量。但是,我认为您不能只从 MATLAB 的变量中加载一组任意索引。
也就是说,如果您的问题属于只需要访问特定行/列的类型,那么我可能会为您提供解决方法。
您可以从矩阵创建struct,将每列作为单独的字段,然后使用-struct 选项保存.mat 文件,以便将每个字段保存为单独的变量。这样一来,你就可以拿出你想要的那个了。
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 转换为struct,方法是将每个单元格分配给相应的字段名称。最后,使用-struct 选项保存 mat 文件,该选项告诉 MATLAB 将每个字段保存为单独的变量。所有这些都应该在您的程序保存巨大的 mat 文件时完成。现在,如果您需要访问,比如说col52,您只需load('myDummyFile','col52')。如果需要,您还可以加载多个。
请记住,如果您对索引要求(即每行/每列)有一个顺序,如果您需要访问矩阵中的任意索引,那么这将很有效,那么这将不起作用。创建单元/结构并保存它时可能会有一些相关的开销。但是,如果您只保存一次,但经常访问,这将得到回报。
如果您的矩阵很大(按照今天的标准,500x250000 并不是那么大),您必须注意这种方法的内存问题,因为我们将整个矩阵复制到一个单元格和结构中。我一步一步地编写它,以便更清楚地理解,但您可以通过从dummy 创建一个单元格并将其分配给自身以及类似地分配给结构来减少重复。但是,这只会将副本数减少 1,因为 Matlab 仍然需要将变量复制到内存中,以便在操作后分配给自己。