MATLAB矩阵过大,导致程序崩溃怎么办?

使用MATLAB处理一个三位高程图,会对一个5800*5800的矩阵进行处理,然后程序跑很久而且内存会占用99%,电脑卡得不得了。使用plot3()绘制图像的时候,也是卡... 使用MATLAB处理一个三位高程图,会对一个5800*5800的矩阵进行处理,然后程序跑很久而且内存会占用99%,电脑卡得不得了。使用plot3()绘制图像的时候,也是卡得不得了。请问怎么解决?使用大数据平台或者python可以解决吗? 展开
 我来答
兰亭幽草
2016-03-18 · TA获得超过2946个赞
知道小有建树答主
回答量:1453
采纳率:46%
帮助的人:371万
展开全部
在matlab中, 当数据比较大时,运算起来就困难了,有时候还会out of memory(例如4000*4000的矩阵,要算矩阵乘法都比较吃力)。此文会记录我学到的一些解决办法:

1. 将数据的存储类型从double转换成single
在matlab中double数据类型占8个字节,single类型占4个字节。把数据类型从double类型转换成single类型可以节省一半的空间。
单精度浮点数single的取值范围可以通过[-realmax('single'), -realmin('single')] U [ realmin('single'), realmax('single')]查看,可以发现其范围一般是足够我们使用了。

2. 避免使用高维矩阵
当数据量很大时,使用高维矩阵无疑是雪上加霜,可以考虑使用多个低维矩阵。
例如有3个N*N的矩阵(K1,K2,K3),为了程序书写的方便,可以把这三个矩阵保存在一个N*N*3的矩阵K中,那么使用这三个矩阵时就只通过K来访问。但是,当N比较大时,三维矩阵K就更大了,很容易造成out of memory。 所以为了避免out of memory,还是使用多个二维矩阵比较好(与其分配一个更大的空间给K,不如分配多个小矩阵,虽然总量一样),可是这样取用这三个矩阵却不方便了。下面给出我的解决方案:

N = 5000;
K1 = rand(N,N);
K2 = rand(N,N);
K3 = rand(N,N);
a = ['K1'; 'K2'; 'K3']; % 将这三个矩阵的名字存成字符串矩阵
B1=eval()(a(1,:)); % 通过eval()函数来取用K1
B2=eval(a(2,:)); % 取用K2
B3=eval(a(3,:)); % 取用K3

这里用到的eval函数的功能强大,可以将字符串的内容当做matlab命令来执行(Execute string containing MATLAB expression)

3. 及时清理不用变量,特别是大数据矩阵。及时清理可以腾出空间。同时,在生成矩阵的时候最好一次性申请足够的空间,不要在程序运行的时候变化矩阵大小。

4. 如有可能,尽量采用矩阵元素之间的运算,而不是直接的矩阵乘法
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式