0

我想请您帮忙看看是否有解决 Matlab 中以下“内存不足”问题的方法。

我在 Matlab 中有两个大矩阵

  • A大小ax2a=7*10^4

  • B大小bx2b=7*10^4

我需要做一个散点图C反对D通过做

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)=[];

问题是当我尝试构造Ctemp和时,Matlab 会出现内存不足错误Dtemp。有什么办法可以规避这个问题,或者我想做的事情是不可行的?


一种天真的方法可能是

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
4

0 回答 0