matlab:将稀疏矩阵与向量连接时内存不足
|
我创建一个3560 x 3560的稀疏矩阵,0ѭ。然后创建两个1 X 3560向量,分别是
S
和T
。
当我运行以下代码时(将S和T连接为A中的行,之后也为A中的列)
A=[A;S;T];
S=[S 0 0];
T=[T 0 0];
A=[A, S\', T\'];
最后一行产生out of memory
错误。
我想我已经因为存储了其他变量而用完了内存,但是对我来说奇怪的是,添加两个3560向量将恰好达到我的极限,因此我认为(或更准确地说,希望是)以某种方式不能很好地进行串联...
我是对的还是没有希望(除了优化代码中的其他部分)?
编辑:
应yoda的要求,我正在发布完整代码。
基本上,它要做的是在图的节点之间获得边缘权重的N X N矩阵,并添加两个向量,这些向量将在最大流量计算中充当源和汇。
nbr_sim(nbr_sim<0.8)=0;
A=sparse(size(nbr_sim,1)+2,size(nbr_sim,2)+2);
nelements=size(nbr_sim,1);
A(nbr_sim>0)=nbr_sim(nbr_sim>0);
clear nbr_sim;
S=abs([1 0 0]*n);
T=abs([0 1 0]*n);
A(1:nelements,end-1)=S\';
A(1:nelements,end)=T\';
A(end-1,1:nelements)=S;
A(end,1:nelements)=T;
没有找到相关结果
已邀请:
2 个回复
屉杆绊
因此,您会看到尽管MATLAB可以一次性创建具有
个元素的矩阵,但是当您尝试通过将单个元素附加到
个元素向量来创建大小相同的数组时,它会耗尽内存。 如果您所说的
和
是列向量,那么
应该给您一个错误: ???使用==> vertcat时出错 CAT参数尺寸不一致。 因此,您必须做其他事情。串联不会改变矩阵的稀疏度,即不会从稀疏切换为满。
此外,双打的“ 13”矩阵只有〜97 MB,这不会给您“内存不足”错误。
驮帽俺篮号