24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1228  |  回复: 5

通史演义

金虫 (正式写手)

[求助] 求助!在MATLAB中做矩阵相乘是总是提示内存在不足,矩阵比较大已有2人参与

求助!在MATLAB中做矩阵相乘是总是提示内存在不足,矩阵大小约为【10000,3】*【3*1000000】

请问该如何优化Matlab算法才能完成计算了,谢谢!
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

蓝谙

至尊木虫 (职业作家)

试试用sparse转换成稀疏矩阵呢?直接sparse(A)应该就能转换了。

发自小木虫IOS客户端
2楼2016-11-26 15:38:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

蓝谙

至尊木虫 (职业作家)

或者你只能把大矩阵转换成分块矩阵再分别算了,如果可以的话。

发自小木虫IOS客户端
3楼2016-11-26 15:42:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

蓝谙

至尊木虫 (职业作家)

【答案】应助回帖

感谢参与,应助指数 +1
可以这样试试,再分几次输出
求助!在MATLAB中做矩阵相乘是总是提示内存在不足,矩阵比较大



发自小木虫IOS客户端
4楼2016-11-26 15:59:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pdl9527

专家顾问 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★
感谢参与,应助指数 +1
通史演义: 金币+5, ★★★★★最佳答案 2017-04-29 14:36:02
数值矩阵所需的储存空间超过了内存中最大的可用的连续储存空间,就会发生内存溢出的错误提示,并没有直接解决的办法。

1e4*3  3*1e6 大小的矩阵可以进行切割,将第一个矩阵A纵向分割成100等份,逐个与第二个矩阵B相乘,结果分别储存在mat文件中,这样以后要用可以直接调用,不建议储存在txt文件中,文件会非常大,下面是程序,将A,B改成自己的矩阵,倒数第二行save后面的路径修改一下就行了,由于文件比较多我是新建了一个res文件储存的。

function question_10
%2016.11.26
clear;clc
N=100;
A=ones(1e4,3);
B=ones(3,1e6);
num=size(A,1)/N;
for i=1:N
    bri=A(num*(i-1)+1:num*i,*B;
    eval([['F',num2str(i)] '=bri;']);
    save (['C:\Users\cirnotxm\Documents\MATLAB\res\',['F',num2str(i)] '.mat'],['F',num2str(i)]);
end
5楼2016-11-26 19:11:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pdl9527

专家顾问 (小有名气)

引用回帖:
5楼: Originally posted by pdl9527 at 2016-11-26 19:11:38
数值矩阵所需的储存空间超过了内存中最大的可用的连续储存空间,就会发生内存溢出的错误提示,并没有直接解决的办法。

1e4*3  3*1e6 大小的矩阵可以进行切割,将第一个矩阵A纵向分割成100等份,逐个与第二个矩阵 ...

笑脸改成: )
6楼2016-11-26 19:14:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 通史演义 的主题更新
信息提示
请填处理意见