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

조회 수: 1 (최근 30일)
Torquato Garulli
Torquato Garulli 2019년 10월 15일
댓글: Torquato Garulli 2019년 10월 16일
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!!

채택된 답변

Matt J
Matt J 2019년 10월 15일
idx = sub2ind([n,m], repmat((1:n).',1,l) ,B);
A(idx)=value;
  댓글 수: 5
Matt J
Matt J 2019년 10월 16일
편집: Matt J 2019년 10월 16일
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.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

제품


릴리스

R2019a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by