我目前正在从事一个项目,它创建和需要更多的数据,超出了我的RAM处理能力。因此,我将数据保存为.mat文件进行处理。但是,当我尝试将我的三维 uint8
矩阵保存为一个文件并再次加载它(使用save
和load
函数)时,我不会得到与以前相同的数据。实际上,调用whos
似乎加载了1×1结构.我一直在save
和load
MATLAB文档中爬行,但似乎无法理解我如何才能实现我想做的事情。
我目前正在用R2014b MATLAB开发一个8GB内存。我试图保存和加载的变量的确切whos
输出如下:
我应该在save
和load
函数中添加一个选项吗?据我所知,有一个选项可以指定要存储的数字的精度,而不是它们的数据类型和结构。我对这些职能的要求如下:
保存文件的
for i = 1:N
for j = times(i,1):times(i,2)
frame = vreader.read(j);
temp_bead(j,1:mod_height,:) = frame(1:mod_height,:);
dispstat(sprintf('Processing Bead %d/%d',i,N),'timestamp');
end
% Copying the matrix data into a new matrix
matrixname = strcat('UncroppedBeadMatrix',int2str(i));
dir = strcat(pwd,foldername,'\',matrixname);
whos('temp_bead');
save(dir, 'temp_bead','-double');
end
,在其中加载文件
foldername = '\UncroppedBeadData';
matrixname = strcat(pwd,foldername,'\UncroppedBeadMatrix',int2str(i),'.mat');
uncropped_matrix = load(matrixname);
请不要犹豫地提出任何可能进一步澄清我的问题的问题。
发布于 2016-01-26 01:05:55
这是因为您正在加载一个变量,即您的load
语句有一个左侧赋值。这就是使它成为struct
的原因。但是,您可以很容易地从这个struct
获得原始矩阵。
uncropped_matrix.temp_bead
另一个(但更糟糕的)选择是从你的load
中删除LHS,然后只打电话。
load(matrixname);
这将将一个名为temp_bead
的变量"poof“到您的工作区中,而不是麻烦于中间struct
,但这并不是很好的做法,因为它使代码难以理解,因为读者无法看到您使用的temp_bead
变量是在哪里创建/分配的。
正如Mohsen在评论中指出的,最好的选择是
load(matrixname, 'temp_bead');
这将消除中间struct
,并允许代码读取器查看指定变量(由字符串输入) matrixname
中的数据来自何处。
https://stackoverflow.com/questions/35007379
复制