在Matlab中规避内存不足问题

时间:2018-10-07 19:33:27

标签: matlab

我希望您能帮助您解决Matlab中以下“内存不足”问题的解决方案。

我在Matlab中有两个大矩阵

  • A,大小为ax2a=7*10^4

  • B,大小为bx2b=7*10^4

我需要针对通过此操作获得的CD的散点图

Ctemp=zeros(a,b);
for i=1:a
    for j=1:b
        Ctemp(i,j)=A(i,1)+B(j,1);
    end
end
C=reshape(Ctemp, a*b,1);
C(C>=2 | C<=-2)=[];

Dtemp=zeros(a,b);
for i=1:a
    for j=1:b
        Dtemp(i,j)=A(i,2)+B(j,2);
    end
end
D=reshape(Dtemp, a*b,1);
D(C>=2 | C<=-2)=[];

问题是当我尝试构造CtempDtemp时,Matlab给出了内存不足错误。有什么办法可以解决这个问题,或者我试图做的事不可行?


天真的方法可能是

C=[];
D=[];

for i=1:a
    for j=1:b
        if A(i,1)+B(j,1)<=2 && A(i,1)+B(j,1)>=-2 
           C=[C; A(i,1)+B(j,1)];
           D=[D; A(i,2)+B(j,2)];
        end
    end
end

但是我不喜欢这种方法:它有一个永远循环的双循环;它不会预分配C,D


这似乎效果更好,我不知道为什么

C=cell(a,1);
D=cell(a,1);


for i=1:a
    tempC=A(i,1)+B(:,1);
    tempD=A(i,2)+B(:,2);
    del=(A(i,1)+B(:,1)>2 | A(i,1)+B(:,1)<-2);
    tempC(del)=[];
    tempD(del)=[];
    C{i}=tempC;
    D{i}=tempD;
end

0 个答案:

没有答案