我希望您能帮助您解决Matlab中以下“内存不足”问题的解决方案。
我在Matlab中有两个大矩阵
A
,大小为ax2
,a=7*10^4
B
,大小为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
和Dtemp
时,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