Accessing an element of an array using an array as its index.
Afficher commentaires plus anciens
Hello,
I am writing up an interpolation function and need to define the vertices of the hypercube surrounding the current values.
My current code to do this is:
% (3) Calculate the A values that are the vertices of the N-D hypercube.
a = zeros(1,2^size(CURRENT,1)-1);
curridx = zeros(1,size(CURRENT,1));
idx = zeros(1,size(CURRENT,1));
for cnt = 1:(2^size(CURRENT,1))
change = find((mod(cnt-1,2.^(0:size(CURRENT,1)-1))==0)==1);
curridx(change) = 1*curridx(change)==0;
for cnt1 = 1:size(CURRENT,1)
idx(cnt1) = lidx(cnt1)*(curridx(cnt1)==0)+uidx(cnt1)*(curridx(cnt1)==1);
end
Subs = num2cell(idx);
a(cnt) = DATA(Subs{:});
end
With the profiler showing that the lines
Subs = num2cell(idx);
a(cnt) = DATA(Subs{:});
Are 32.1% and 23.8% of the total run-time respectively. Does anybody know a more efficient method?
Thank you!
4 commentaires
darova
le 8 Avr 2020
Why do you need to convert numeric to cell?
Subs = num2cell(idx);
a(cnt) = DATA(Subs{:});
Why don't just
a(cnt) = DATA(idx); % only one values inside 'idx'?
And no for loop is needed. Use element-wise operator .*
% for cnt1 = 1:size(CURRENT,1)
% idx(cnt1) = lidx(cnt1)*(curridx(cnt1)==0)+uidx(cnt1)*(curridx(cnt1)==1);
% end
idx = lidx.*(curridx==0) + uidx.*(curridx==1);
Ayden Clay
le 9 Avr 2020
darova
le 9 Avr 2020
did you try my suggestions?
Ayden Clay
le 9 Avr 2020
Réponse acceptée
Plus de réponses (0)
Catégories
En savoir plus sur Calendar dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!