MATLAB Answers

0

Fastest way to substitute elements in a matrix at given positions?

Asked by Torquato Garulli on 15 Oct 2019
Latest activity Commented on by 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

Sign in to comment.

1 Answer

Answer by Matt J
on 15 Oct 2019
 Accepted Answer

idx = sub2ind([n,m], repmat((1:n).',1,l) ,B);
A(idx)=value;

  5 Comments

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.

Sign in to comment.