Create arrays of observations
3 次查看(过去 30 天)
显示 更早的评论
Hello everybody,
Probably it is a very silly question but I am struggling on it..
I have a series of observations saved as 'pt_mean_lev1_1' up to 'pt_mean_lev1_348' (see picture below) and I want to make an array of them being a = 1x348. How can I do that?
Thank you very much!
3 个评论
采纳的回答
Sulaymon Eshkabilov
2021-8-4
Here is one of the viable solutions with dynamically naming variables and attaining their values from the workspace.
a = [];
for ii=1:348
Var = strcat('pt_mean_lev1_', num2str(ii));
a=[a, eval(Var)];
end
3 个评论
Rik
2021-8-4
In the screenshot you can see the number of elements of each element. Growing the array dynamically like this (instead of pre-allocating) results in terrible performance. I would also refrain from teaching people to use eval as the solution. As already evidenced in this thread, that is a source of trouble.
k=500000;N=100;%N=348 takes mare than the 55 second limit
tic
a = [];
for ii=1:N
a=[a, rand(k,1)];
end
toc
tic
a = zeros(k,N);
for ii=1:N
a(:,ii)=rand(k,1);
end
toc
更多回答(2 个)
CARLOTTA DENTICO
2021-8-4
1 个评论
Sulaymon Eshkabilov
2021-8-4
I meant a separate thread and not here. Two questions in one thread that is confusing.
Rik
2021-8-4
You should not name your variables dynamically. Why are you not storing them in an array when reading? What is wrong with the code below?
lon = ncread('topaz_V4_myocean_arctic_grid1to8_da_class1_19910115.nc', 'longitude');
lat = ncread('topaz_V4_myocean_arctic_grid1to8_da_class1_19910115.nc', 'latitude');
fram = (lon>=0 & lon<=20 & lat>=76 & lat<=80);
pt_lev1_=zeros(size(pt_lev1,1)*size(pt_lev1,2),348);
for k = 1:348
pt_lev1_(:,k) = reshape(pt_lev1(:,:,k),[],1);
end
pt_mean_lev1_=mean(pt_lev1_(fram,1:k),1,'omitnan')
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Calendar 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!