Matlab: сделать 9 строк одного и того же значения без сохранения всех 9 значений - PullRequest
0 голосов
/ 21 июня 2019

Мне нужно создать массив значений 1e7 x 9. Все строки разные, но все столбцы являются репликами первой строки:

n=1e7; %simulations
t=1:8; %contacts
lambdaU=repmat(rand(n,1),1,length(t)+1) %<<<<<<<Here 

CalcTimU=zeros(n,length(t)+1);

%I then do:
for j=1:n %for each simulation (row)
    for i=2:length(t)+1 % for each column

    CalcTimU(j,i)=CalcTimU(j,i-1)+lambdaU(j,i).*(10-CalcTimU(j,i-1));


    end 
end

Это кажется очень расточительным. Есть ли способ уменьшить объем хранилища?

1 Ответ

1 голос
/ 21 июня 2019

Конечно. Вы даже можете векторизовать цикл j :

n=1500; %simulations
t=1:8; %contacts

lvec = rand(n,1);
lambdaU=repmat(lvec,1,length(t)+1); %<<<<<<<Here 

CalcTimU=zeros(n,length(t)+1);

tic
%I then do:
for j=1:n %for each simulation (row)
    for i=2:length(t)+1 % for each column
    CalcTimU(j,i)=CalcTimU(j,i-1)+lambdaU(j,i).*(10-CalcTimU(j,i-1));
    end 
end
toc

% Vectorized:
tic
CalcTimU2=zeros(n,length(t)+1);
for i=2:length(t)+1
    CalcTimU2(:,i) = CalcTimU2(:,i-1)+lvec.*(10-CalcTimU2(:,i-1));
end
toc

isequal(CalcTimU,CalcTimU2)

И результаты:

Elapsed time is 0.220032 seconds.
Elapsed time is 0.00030899 seconds.
ans = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...