Я бы хотел, чтобы вы помогли узнать, есть ли решение следующей проблемы «нехватки памяти» в 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)=[];
.проблема в том, что Matlab выдает ошибку памяти, когда я пытаюсь построить Ctemp
и 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