首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >善用记忆

善用记忆
EN

Stack Overflow用户
提问于 2017-06-08 07:54:46
回答 2查看 94关注 0票数 0

如果我创建一个含有1000个矩阵的单元格(每个矩阵的大小为800*1280),那么在使用它之后清除每个矩阵将加快计算速度?

示例

代码语言:javascript
运行
复制
 A=cell(1000,1);
  for i=1:1000
      A{i}=rand(800,1280);
  end
  image=A{1};
  image2=A{2}; % I will use image and image2 with other functions
  A{1}=[];
  A{2}=[];

编辑

该单元的真正用途将是:

代码语言:javascript
运行
复制
A=cell(1000,1);
parfor i=1:1000
    A{i}=function_that_creates_image(800,1280); % image with size 800*1280 px
end
for i=1:number_of_images   % number_of_images=1000 in this case
image1=A{1};
    image2=A{2};
    A{1}=[];
    A{2}=[];
    % image1 and image 2 will be used then in the next lines
    %next lines of code
end

我注意到,在parfor循环中计算A的组件要比计算for中的每个循环的每个组件要快。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-08 08:00:18

如果您希望使用较少的内存并加快计算速度,则避免使用单元格是更明智的做法。幸运的是,在这种情况下非常容易,因为所有矩阵都是相同大小的,所以可以使用ND数组。

代码语言:javascript
运行
复制
A = zeros(800,1280,1000);
for k = 1:size(A,3)
   A(:,:,k) = function_that_creates_image(800,1280);
end
image = A(:,:,1);
image2 = A(:,:,2); % I will use image and image2 with other functions

编辑:

如果您想进一步处理每个图像,我将将它们保存到parfor中的一个文件中,因此在第一个循环的末尾将有1000个.mat文件:

代码语言:javascript
运行
复制
parfor k = 1:number_of_images
   A = function_that_creates_image(800,1280);
   save(['images_dir\image' num2str(k) '.mat'],'A');
end

然后您可以根据需要加载它们,以便使用load进行处理。

代码语言:javascript
运行
复制
for k = 1:number_of_images-1
    image1 = load(['images_dir\image' num2str(k) '.mat']);
    image2 = load(['images_dir\image' num2str(k+1) '.mat'];
    % do what you want with those images...
end

这样,每次只在内存中保存2个图像,在下一次迭代时,它们将被下一个图像替换。

票数 1
EN

Stack Overflow用户

发布于 2017-06-08 08:41:35

如果你把所有的东西都放进内存里(你至少需要16‘t来保存数据并对数据的各个部分做一些工作,同时你应该拥有32’t的内存),清除这些数据根本不会改变任何事情。如果没有,我会假设/希望Matlab和Windows足够聪明,可以优化内存中的哪个块,哪个块放在磁盘上,所以删除不会有帮助。但你可能不想依赖这个。

您可以做的是拥有A{i} = 'path-to-file';,然后在需要的时候将它加载到内存中。为什么你需要先加载所有的图像,然后一个一个地处理它们呢?对于内存来说,将image1 = rand(...);image2 = rand(...);本身简单地放在循环中并重用这些image1image2会好得多。甚至不需要拥有这个A

通常,如果您想同时拥有大量数据,那么高数组是您应该使用的内存友好型解决方案。https://www.mathworks.com/help/matlab/tall-arrays.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44429856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档