I have a matrix P_ind that is AxB (where each element is an integer in the range 1:C) and a matrix xgrid that is CxDxB. Is there a smart way to create a new matrix xgrid2 that is AxDxB without resorting to the for loop solution below?
xgrid2=NaN(A,D,B);for i=1:A for j=1:B xgrid2(i,:,j)=xgrid(P_ind(i,j),:,j); endend
Edit: Since there were comments on the clarity of my question, let me try again. What I want to do is create the array xgrid2 in the code below, but in a more succint and most of all faster way than the nested for loops in my approach.
A=10000; % no. of individuals
B=65; % maximum age
C=30; % gridpoints for P
D=50; % gridpoints for S
P_ind=randi(C,A,B);xgrid=randi(5000,A,D,B);xgrid2=NaN(A,D,B);for i=1:A for j=1:B xgrid2(i,:,j)=xgrid(P_ind(i,j),:,j); endend
Best Answer