Assignment and indexing issue
Show older comments
I have some data and their indexed coordinates in an array x :
% x(q,:) == [jq,iq,kq,xq]
I have an empty 3D matrix d in which I want to store these data, like so :
d = Inf(m,n,p);
for i=1:length(x)
d(x(i,2),x(i,1),x(i,3)) = x(i,4);
end
My question is, is there any way to do it without a loop ? I was thinking something like this but it does not work :
d = Inf(m,n,p);
d(x(:,[2,1,3])) = x(:,4);
Maybe throw a sub2ind or something in there somewhere ?..
Accepted Answer
More Answers (1)
Jos (10584)
on 24 May 2016
x = [1 1 1 10 ; 1 1 2 20 ; 2 3 2 30] % data
sz = max(x(:,1:3),[],1)
d = Inf(sz)
idx = sub2ind(sz,x(:,1),x(:,2),x(:,3))
d(idx) = x(:,4)
3 Comments
Marsellus Wallace
on 24 May 2016
Edited: Marsellus Wallace
on 24 May 2016
Jos (10584)
on 24 May 2016
Both are fine. Compare them for readability, your understanding of the code, speed of execution, translation into other languages, etc.
Marsellus Wallace
on 24 May 2016
Categories
Find more on Loops and Conditional Statements 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!