Accessing an element of an array using an array as its index.
Show older comments
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 Comments
darova
on 8 Apr 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
on 9 Apr 2020
darova
on 9 Apr 2020
did you try my suggestions?
Ayden Clay
on 9 Apr 2020
Accepted Answer
More Answers (0)
Categories
Find more on Calendar in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!