我想请您帮忙看看是否有解决 Matlab 中以下“内存不足”问题的方法。
我在 Matlab 中有两个大矩阵
A大小ax2与a=7*10^4B大小bx2与b=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