作业帮 > 数学 > 作业

matlab中把矩阵分解为列向量

来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:数学作业 时间:2024/07/24 03:32:56
matlab中把矩阵分解为列向量
例如矩阵[1,2;3,4;5,6]变为两个列向量[1;3;5]和][2;4;6].
我的目的是对一个1000*2000的矩阵按列进行某种复杂的运算处理(每一列最终得到一个数值),得到一个行向量.要求是不希望用到循环来读取每一列.类似于B=sum(A)表示A矩阵按列求和得到行向量B.
本意:找出1:1:100范围内5个数构成的向量(无先后顺序),使得它的系数在-5:1:5循环所有的循环情况下零值所占的比例最少.因为之前考虑到不用循环会不会实现这么大矩阵的运算,所以标题可能跟下面讨论的不太符.
%%%%%%%%
不知道修改后表达清楚了没.-5:1:5选5个组成的所有矩阵(11.^5=161051).我把我完成的75287520改为252的m文件发下,请改正.
clear all
n1=-5:1:5;
n2=-5:1:5;
n3=-5:1:5;
n4=-5:1:5;
n5=-5:1:5;
[temp1,temp2,temp3,temp4,temp5]=ndgrid(n1,n2,n3,n4,n5);
N=[temp1(:),temp2(:),temp3(:),temp4(:),temp5(:)];%相当于上述问题中A 161051*5
%
L1=nchoosek(1:1:10,5);%%%%%%%5*252
L=(L1)'; %%%相当于问题中B 5*252
ld=abs(N*L); %%%%%%%%%%%%%%%%相当于问题中A*B 161051*252
[a c]=size(ld);
b=zeros(1,252);
for i=1:252
LL=ld(:,i);
z=length(find(LL
matlab中把矩阵分解为列向量
通过矩阵乘法运算实现,
比如
A=[1,2;3,4;5,6]
sum(A)可以写成[1,1,1;1,1,1]*A
我有两点疑问:
161051*75287520这么大的矩阵,MATLAB根本读不进来.(我粗算了一下占用内存约几十万个G)除非是用稀疏矩阵.
所以我对你的问题表示怀疑,因为你没有办法将这些数一次读进MATLAB,更不用说处理它了.如果读不进来的话,那么什么办法都是白谈.
另外一种就是直接读文件,然后循环处理,但是它的大小是几十万个G,这使得此方法可能也不可取.
%%%%%%%%%%%%%%%%%%%%%
我看了你的问题,我觉得你还是把你的本意说清楚一些.
想做什么,而不是实现什么.
对于你这个问题,你应当不用组装起所有你的那么大的矩阵.
另外:
A是-5:1:5选5个里面所有的排列,有161051*5;这个好像有问题.从多少个里面选五个,好像都不是161051这个数.
%%%%%%%%%%%%%%
建议你得自己写排列组合的程序,用循环的方式来弄.
数据量小的话,可以一次把所有的可能生成出来,数据量大,根本没有办法把所有可能一次弄出来.
用循环的话,我不建议你用MATLAB,因为MATLAB对于矩阵计算优势很大,但对于循环并不是它的强项.