Fastest way to substitute elements in a matrix at given positions?
1 view (last 30 days)
Show older comments
Torquato Garulli
on 15 Oct 2019
Commented: Torquato Garulli
on 16 Oct 2019
Good evening,
suppose I have an array A with size (n,m) and an array B with size (n,l), with l<m.
Suppose elements of array B point to elements of array A in the following fashion:
- B(x,y) --> A(x, B(x,y))
What is the fastest way to substitute all elements of A that are pointed by elements of B with a given value? At present I am using for loops but I guess they are not very efficient.
Also, would it be different if matrix A would be generated by repetition of the same known row n times?
Thanks a lot for any help or hint you are willing to give!!
0 Comments
Accepted Answer
Matt J
on 15 Oct 2019
idx = sub2ind([n,m], repmat((1:n).',1,l) ,B);
A(idx)=value;
5 Comments
Matt J
on 16 Oct 2019
Edited: Matt J
on 16 Oct 2019
It depends on what the code for the loop looks like. Generally speaking though, Matlab's JIT compiler can do some things to optimize M-coded for-loops, but is limited by the complexity of operations done inside the loop and your Matlab version, of course.
If you can avoid M-Coded for-loops, as my solution does, it often leads to better performance because it doesn't rely on the JIT. It is just running pre-compiled C/C++ code internally.
More Answers (0)
See Also
Categories
Find more on Matrix Indexing 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!