Matlab计算大矩阵相乘的问题求解

王宇伟 2014-02-26 10:03:20
对于一个矩阵A
可以用Matlab直接计算 B=AA'(A'是A的转置)
但是A是个很大的矩阵(4000行500000列),内存很小机器上的Matlab一下子运行不了
有什么算法可以在有限的内存下将这个矩阵乘法任务完成,时间无要求但内存要小
...全文
1150 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
王宇伟 2014-03-02
  • 打赏
  • 举报
回复
http://www.ilovematlab.cn/thread-276908-1-1.html
王宇伟 2014-02-28
  • 打赏
  • 举报
回复
引用 1 楼 libralibra 的回复:
分块矩阵的乘法 对于矩阵乘法要注意对应子块要确保相乘是有意义的(第一个子块的列数等于第二个的行数) 设A为m × l矩阵 , B为l × n矩阵 ,分块成: 若A的子块的列数等于B对应子块的行数则:
根据矩阵分块的思路,问题详细的解决方案: 问题:矩阵大小A:3585行531543列大小,以稀疏矩阵的方式存于txt文件中; 将矩阵的每一行看做一个记录,需要计算两两记录之间的向量积,因矩阵过大内存不足,B=AA'无法一次完成 解决过程:将矩阵按行分割,每20条记录(20行531543列)作为一个子矩阵,分别以稀疏矩阵形式存于txt文件0.txt至179.txt共180个子矩阵,最后一个矩阵是5行531543列; 子矩阵相乘

function out=Sim(i,j) %i,j是两子矩阵存储的文件名
D1=dlmread(strcat(num2str(i),'.txt'));
D2=dlmread(strcat(num2str(j),'.txt'));
A1=spconvert(D1);
A2=spconvert(D2);
AF1=full(A1);
AF2=full(A2);
if size(AF1,2) < 531543  //稀疏矩阵存储,为0的未存储,将其补上
    AF1=[AF1,zeros(size(AF1,1),531543-size(AF1,2))];
end
if size(AF2,2) < 531543
    AF2=[AF2,zeros(size(AF2,1),531543-size(AF2,2))];
end
out=AF1*AF2';
Step1:

for i=0:179
    A=Sim(i,0);
    for j=1:179
        A=[A,Sim(i,j)];  %横向拼接
    end
    dlmwrite(strcat('sim',num2str(i),'.txt'),A,'delimiter',' ');
end
Step2:

A=dmlread(strcat('sim0.txt'));
for i=1;179
   A=[A;dmlread(strcat('sim',num2str(i),'.txt'));  %纵向拼接
end
 dlmwrite('sim.txt',A,'delimiter',' ');
unmapped 2014-02-27
  • 打赏
  • 举报
回复
>> memory Maximum possible array: 22033 MB (2.310e+10 bytes) * Memory available for all arrays: 22033 MB (2.310e+10 bytes) * Memory used by MATLAB: 860 MB (9.016e+08 bytes) Physical Memory (RAM): 24574 MB (2.577e+10 bytes) * Limited by System Memory (physical + swap file) available. >> aa=rand(4000,500000,'double'); >> memory Maximum possible array: 6746 MB (7.074e+09 bytes) * Memory available for all arrays: 6746 MB (7.074e+09 bytes) * Memory used by MATLAB: 16119 MB (1.690e+10 bytes) Physical Memory (RAM): 24574 MB (2.577e+10 bytes) * Limited by System Memory (physical + swap file) available. >> whos aa Name Size Bytes Class Attributes aa 4000x500000 16000000000 double 直接耗去了十几GB的内存, 换用64位计算机吧
libralibra 2014-02-26
  • 打赏
  • 举报
回复
分块矩阵的乘法

对于矩阵乘法要注意对应子块要确保相乘是有意义的(第一个子块的列数等于第二个的行数)

设A为m × l矩阵 , B为l × n矩阵 ,分块成:


若A的子块的列数等于B对应子块的行数则:
MATLAB在日常计算中的应用》由大量的MATLAB计算实例组成。通俗易懂,图文并茂,资料丰富,实用性强。提供大量MATLAB计算实例以及全部实例的M文件,方便读者使用。既适合初学者,也适合有一定MATLAB基础的爱好者或专业技术人员。 目录 第1章MATLAB基础知识 1.1MATLAB的发展历程 1.2MATLAB的特点 1.3MATLAB的桌面操作环境 1.4MATLAB的常量和变量 1.5MATLAB命令窗口应用例子 1.6小结 第2章多项式处理 2.1多项式的创建 2.2多项式的因式分解 2.3乘积展开成多项式 2.4合并同类项——对多项式合并同类项 2.5多项式加法(或减法) 2.6多项式乘法 2.7多项式除法 2.8求多项式的根 2.9多项式的替换 2.10符号简化 2.11分式通分 2.12求符号函数的反函数 2.13求符号表达式的复合运算 2.14将符号表达式转化为数值表达式 2.15将数值表达式转化为符号表达式 2.16小结 第3章MATLAB绘图 3.1二维绘图 3.1.1画函数图 3.1.2画饼状图 3.1.3画条形图 3.1.4手工绘图 3.1.5在极坐标下绘图 3.2三维绘图 3.2.1画球形图 3.2.2画圆柱体图 3.2.3画三维曲线图 3.2.4画直方图 3.2.5画饼状图 3.2.6画低通滤波器的三维网格图 3.2.7画三维平面图 3.2.8画瀑布图 3.2.9画伞状图 3.2.10画花蕊图 3.2.11画正立方体 3.3小结 第4章复数运算 4.1复数简介 4.1.1复数 4.1.2复数的四种表示形式 4.1.3复数的四则运算 4.1.4复数的其他运算 4.2复数运算程序1 4.2.1复数代数形式和极坐标形式间的相互转换程序 4.2.2求代数形式复数的倒数程序 4.2.3求任一复数平方根的程序 4.2.4求两个代数形式复数之积的程序 4.2.5求两个代数形式复数之商的程序 4.3复数运算程序2 4.3.1求复数的乘幂程序 4.3.2求复数的N次方根程序 4.3.3求复数的指数程序 4.3.4求复数的自然对数程序 4.3.5求复数的常用对数程序 4.3.6求复数的正弦程序 4.3.7求复数的余弦程序 4.3.8求复数的正切程序 4.4小结 第5章矩阵计算 5.1矩阵简介 5.1.1行列式 5.1.2矩阵的加法、乘法和矩阵的转置 5.1.3矩阵的除法——矩阵求逆 5.1.4矩阵的特征值和特征向量 5.2求行列式值 5.2.1求3阶行列式值 5.2.2求4阶行列式值 5.2.3求5阶行列式值 5.2.4求6阶行列式值 5.3矩阵转置 5.3.1将3阶矩阵转置 5.3.2将4阶矩阵转置 5.3.3将5阶矩阵转置 5.3.4将6阶矩阵转置 5.4矩阵相乘 5.4.1两个3阶实矩阵相乘 5.4.2两个4阶实矩阵相乘 5.4.3两个5阶实矩阵相乘 5.4.4一个4×5矩阵与一个5×3矩阵相乘 5.5矩阵求逆 5.5.1求2阶矩阵的逆阵 5.5.2求3阶矩阵的逆阵 5.5.3求4阶矩阵的逆阵 5.5.4求5阶矩阵的逆阵 5.5.5求6阶矩阵的逆阵 5.6求矩阵的特征值和特征向量 5.6.1求2阶矩阵的特征值和特征向量 5.6.2求3阶矩阵的特征值和特征向量 5.6.3求4阶矩阵的特征值和特征向量 5.7小结 第6章解多元一次线性方程组 6.1多元一次方程组简介 6.2解实系数多元一次方程组 6.2.1解实系数二元一次方程组 6.2.2解实系数三元一次方程组 6.2.3解实系数四元一次方程组 6.2.4解实系数五元一次方程组 6.2.5解实系数六元一次方程组 6.3解复系数多元一次方程组 6.3.1解复系数二元一次方程组 6.3.2解复系数三元一次方程组 6.3.3解复系数四元一次方程组 6.3.4解复系数五元一次方程组 6.3.5解复系数六元一次方程组 6.4小结 第7章解一元N次方程(上) 7.1实系数一元一次方程 7.2实系数一元二次方程 7.2.1实系数一元二次方程的求根公式介绍 7.2.2程序实例 7.3实系数一元三次方程 7.3.1卡尔丹公式 7.3.2盛金公式 7.3.3解题实例——解缺少二次项的实系数一元三次方程 7.3.4解题实例——解一般形式的实系数一元三次方程 7.4实系数一元四次方程 7.4.1一元四次方程解法介绍 7.4.2MATLAB解一元四次方程实例 7.5复系数一元一次方程 7.6复系数一元二次方程 7.6.1复系数一元二次方程解法介绍 7.6.2说明 7.6.3实例 7.7复系数一元三次方程 7.8复系数一元四次方程 7.9小结 第8章解一元N次方程(下) 8.1实系数一元代数方程 8.1.1求解实系数一元五次方程的根 8.1.2求解实系数一元六次方程的根 8.1.3求解实系数一元七次方程的根 8.1.4求解实系数一元八次方程的根 8.2复系数一元代数方程 8.2.1求解复系数一元五次方程的根 8.2.2求解复系数一元六次方程的根 8.2.3求解复系数一元七次方程的根 8.2.4求解复系数一元八次方程的根 8.3小结 第9章超越方程及非线性方程 9.1超越方程说明 9.2解超越方程 9.2.1解指数方程 9.2.2解对数方程 9.2.3解三角方程 9.2.4解无理方程 9.2.5解反三角函数方程 9.2.6解一般超越方程 9.3解非线性方程 9.3.1解一元非线性方程 9.3.2解二元非线性方程组 9.3.3解三元非线性方程组 9.4小结 第10章用图像法解实系数一元N次方程 10.1实系数一元一次方程 10.2实系数一元二次方程 10.3实系数一元三次方程 10.4实系数一元四次方程 10.5实系数一元五次方程 10.6实系数一元六次方程 10.7实系数一元七次方程 10.8实系数一元八次方程 10.9小结 第11章用图像法解实系数N元一次方程组 11.1实系数二元一次方程组 11.2实系数三元一次方程组 11.3实系数N元一次方程组 11.4小结 参考文献

3,423

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 其他开发语言
社区管理员
  • 其他开发语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧