首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MatLab瓶颈

MatLab瓶颈
EN

Stack Overflow用户
提问于 2014-06-03 09:43:36
回答 1查看 157关注 0票数 6

我正在处理大数组(大约6x4000万),我的代码显示了很大的瓶颈。我在MatLab方面有丰富的编程经验,但对内部流程不太了解(比如内存之类的)。

我的代码看起来如下(当然,所有的变量都是初始化的,特别是循环中的数组,我只是不想用代码轰炸你们):

我先看了文件,

代码语言:javascript
运行
复制
 disp('Point cloud import and subsampling')
    tic
    fid=fopen(strcat(Name,'.dat'));
    C=textscan(fid, '%d%d%f%f%f%d'); %<= Big!
    fclose(fid);

然后从内容中创建数组,

代码语言:javascript
运行
复制
    y=C{1}(1:Subsampling:end)/Subsampling;
    x=C{2}(1:Subsampling:end)/Subsampling;
    %... and so on for the other rows    

    clear C %No one wants 400+ millon doubles just lying around.

并清除单元格数组(1),并使用新值创建一些图像和数组。

代码语言:javascript
运行
复制
for i=1:length(x)

    PCImage(y(i)+SubSize(1)-maxy+1,x(i)+1-minx)=Reflectanse(i);     
    PixelCoordinates(y(i)+SubSize(1)-maxy+1,x(i)+1-minx,:)=Coordinates(i,:);

end
toc

在此之前,所有的操作或多或少都很顺利,但随后我处理了一些数组。

代码语言:javascript
运行
复制
disp('Overlap alignment')
   tic

    PCImage=PCImage(:,[1:maxx/2-Overlap,maxx/2:end-Overlap]); %-30 overlap?
    PixelCoordinates=PixelCoordinates(:,[1:maxx/2-Overlap,maxx/2:end-Overlap],:);
    Sphere=Sphere(:,[1:maxx/2-Overlap,maxx/2:end-Overlap],:);

toc 

这是一个很大的瓶颈,但在下一步会变得更糟。

代码语言:javascript
运行
复制
disp('Planar view and point cloud matching')
   tic

   CompImage=zeros(max(SubSize(1),PCSize(1)),max(SubSize(2),PCSize(2)),3);

   CompImage(1:SubSize(1),1:SubSize(2),2)=Subimage; %ExportImage Cyan
   CompImage(1:SubSize(1),1:SubSize(2),3)=Subimage;
   CompImage(1:PCSize(1),1:PCSize(2),1)=PCImage; %PointCloudImage Red

  toc

输出

点云导入和次采样 经过的时间是181.157182秒。 重叠对齐 经过的时间是408.750932秒。 平面视点云匹配 经过的时间是719.383807秒。

我的问题是:在1中清除未使用的对象(如1中的未使用对象)会有任何影响吗?(看起来不像那样)

我是否监督过任何其他重要的机制或经验规则,或者整个事情是不是太过了,应该是这样发生的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-03 11:52:09

当使用subsref时,matlab会复制子引用的元素。对于大型数组来说,这可能是代价高昂的。通常情况下,将像这样的矢量进行连锁化会更快

代码语言:javascript
运行
复制
res = [a,b,c];

对于上面编写的当前代码来说,这是不可能的,但是如果可以对代码进行修改以使其工作,它可能会节省一些时间。

编辑用于多维数组,您需要使用cat

代码语言:javascript
运行
复制
CompImage = cat(dim,Subimage,Subimage,PCImage);

其中,本例的dim为3。

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

https://stackoverflow.com/questions/24011917

复制
相关文章

相似问题

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