How to efficiently generate a new array by indexing an array with another array
12 次查看(过去 30 天)
显示 更早的评论
Is there a faster way to implement this loop, maybe vectorizing it?
for j = 1:m
C(:,j) = B(A(:,j,k),j);
end
where:
A is a l x m x n 3-D array of int from 1 to 4
B is a p x m 2-D array of doubles
C is a l x m 2-D array of doubles
l = order of 1000 ; m = order of 10 ; n = order of 100 ; p = 4
采纳的回答
Walter Roberson
2017-1-3
L = l; %make it easier to distinguish lower-case L
C = B(sub2ind(size(B), A(:,:,k), repmat( 1:m, L, 1) ));
2 个评论
Walter Roberson
2017-1-4
Yes, that is a good idea, to move that computation outside the loop.
If you have R2016b or later it can be improved even more:
C = B( (A(:,:,k) - 1) * p + (1:m) )
and the 1:m could be assigned to a variable before the loop
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!