Обход проблемы памяти в Matlab - PullRequest
0 голосов
/ 07 октября 2018

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