抖音资讯

douyinzx

matlab内存不足的解决方法(matlab内存分配错误)

iseeyu2年前 (2024-04-30)抖音资讯132

MATLAB的内存管理是自动完成的,但内存使用不当会造成程序运行效率低下。许多初学者抱怨MATLAB程序慢(效率低),主要原因可能是不了解MATLAB的内存自动管理机制造成的。

MATLAB是以数组(Array)为基本数据单元的一门语言,程序中的一切数据都是数组。MATLAB用连续的内存来存储数值型数组,当数组大小发生变化时会重新分配一块合适的内存,把数据复制过去并回收原来的内存。如果数组是在程序运行过程中逐渐“长大”的,MATLAB会反复分配和回收内存,严重影响程序的运行效率。为了避免这种情况,可以用zeros函数预先为数组分配合适的内存,然后再对其进行赋值。

另外,MATLAB数组在内存中是按“列优先”的顺序存放数组中的元素的。对于多维数组,是按从低到高的维度顺序依次存储数组中的元素的,如下图所示

 

图中红色的序号即为数组在内存中的存储顺序。在程序中对数组进行索引或赋值时,如果能够按照这种顺序来存储,一方面可以利用计算机的缓存机制,另一方面可以避免程序在内存中的不断跳转,从而可以显著地提高程序的运行效率。如果通过多重循环来存取数据,遵照此原则,最内层循环应该遍历最低维(列),从内向外,依次向高维过渡。

下面的程序可以比较预分配内存和索引顺序对程序运行时间的影响:

%  数组索引效率比较
clear
preAllocate = 'on'; %设为off关闭预分配内存
r = 10000;c = 10000;
tic
if isequal(preAllocate,'on')
    A = zeros(r,c); %预分配内存
else
    preAllocate = 'off';
end
for m=1:r %行优先
    for n=1:c
        A(m,n) = m+n;
    end
end
fprintf('行优先,预分配内存 %s, 耗时 \t%f\n',upper(preAllocate),toc)

tic
if isequal(preAllocate,'on')
    B = zeros(r,c); %预分配内存
end
for n=1:c %列优先
    for m=1:r
        B(m,n) = m+n;
    end
end
fprintf('列优先,预分配内存 %s, 耗时 \t%f\n',upper(preAllocate),toc)

看一下不同情况下的耗时对比

行优先,预分配内存 OFF, 耗时  407.735436
列优先,预分配内存 OFF, 耗时  1.346732
行优先,预分配内存 ON,  耗时  1.149516
列优先,预分配内存 ON,  耗时  0.412534

可以看出,内存使用不当可以造成近千倍的效率差别。是因为MATLAB慢吗?

一言以蔽之,为数组预分配内存并遵循“列优先”的原则使用数组中的数据,是提高MATLAB效率的有效途径。

 


几点说明:

  1. 不同类型的数组在内存中的存储方式也不尽相同,单一数据类型的数组,如数值型数组和字符型数组,在内存中是连续存储的。而容器型数据的底层单元则可以分开存储,例如,结构数组一般每个域用连续的内存存储,不同的域则可以存在不同的位置。这是容器型数据的优势,局部改动不会影响其他部分。
  2. 稀疏矩阵仅保存非零元素及其下标。
  3. 不同类型的数组预分配内存的方式也不一样。例如数值型数组一般用zeros函数;字符串型数组用strings函数;元胞数组用cell函数;表则用table函数。详情可在命令行doc preallocation。

扫描二维码推送至手机访问。

版权声明:本文由西安泽虎代运营发布,如需转载请注明出处。

转载请注明出处https://0291.com.cn/post/47976.html

相关文章

ps火焰字怎么做(用ps制作火焰文字效果)

ps火焰字怎么做(用ps制作火焰文字效果)

火焰文字,这里指的是文字边缘呈现出火焰的状态的文字。火焰文字,可以用于图片设计中。下面介绍Photoshop软件制作火焰文字的方法。 (1)在Photoshop软件中,用【文字】工具,写出两个白色字“火焰”,背景图层用黑色。   (2)按【Ctrl+T】,将...

百度搜索广告怎么收费?有哪些收费模式?

百度搜索广告怎么收费?有哪些收费模式?

我觉得也非常的有必要。还有呢就是系统推荐。那之前很多培训机构了,百度搜索广告投放技巧同样大家养号对不对?那有了这个对作品的流量本身是没什么用的。但是养号的好处呢就是能够让你刷到很多同类目的账号,同类目的视频啊,也就是系统通过标签来做推荐。那接触更多的行业账号和行业视频,我觉得是非常有必要的。对,那最...

视频提取音频的软件哪个好用(手机提取音频的方式)

视频提取音频的软件哪个好用(手机提取音频的方式)

大家在日常的学习工作中难免会遇到这个烦恼,像是你要将这段视频的中的音频,插入到另外的一个新的视频中,但是很多软件操作都比较繁琐,小程序的功能又不太完善,那应该如何操作才能解决这个问题呢? 其实我们往往只需要三个简单的步骤,就可以轻松解决这个烦恼,具体需要怎么操作呢?想知道答案的小伙伴赶紧往下...

抖音模板在哪里找素材(免费手机视频制作模板)

抖音模板在哪里找素材(免费手机视频制作模板)

相信很多想要做短视频的朋友都有一个烦恼,那就是不想出镜,其实这个问题很好解决,我们可以做混剪。但是混剪需要找大量素材,对于新手来说,这也是一大难题。因此,今天就给大家介绍一下,抖音怎么找素材,几个快速搞定素材的技巧:   01 利用工具系统查找...

快手小店开放平台有哪些(手机登录快手小店网页版)

快手小店开放平台有哪些(手机登录快手小店网页版)

  快手的电商,应该不用多说了,大家都知道,量很大,主播很猛!   今年有段时间,快手推出了快手企业店,那时候我是最早一批对接官方小二的,并且也是对接了第一批商家,帮助开通快手企业店内测的。结果快手企业店问题比较多,企业店的好物联盟到目前还没有正式...

品牌如何去做抖音推广?做到这几点就够了!

品牌如何去做抖音推广?做到这几点就够了!

Hello,大家好,欢迎来到新的一期李明说运营,伴随着用户数量、每日活跃髙速提高,抖音短视频推动了一大波流量红利。从视角,抖音短视频十分出色是抖音短视频的特性、社交媒体气氛和遮盖客户特性。许多商品、角色的不经意走红,让闻到了商机。品牌做抖音,既要务实也要务虚,务实是做做投产...

现在,非常期待与您的又一次邂逅

我们努力让每一部企业宣传片和抖音短视频成为商业大片