Using cell array for indexing
    4 views (last 30 days)
  
       Show older comments
    
I have matrices of varying dimensionality I need to index.
So just writing A(i1,...,in) is not an option because n can vary in my application.
What is known to work for getting a single element out of A is using a cell array:
IndArray={i1,...,in}
Elem=A(IndArray{:})
However I'd like to do something like SubMatrix= A(i1,i2,...,im,:,:,...,:), where m<n. Is there a way to do that?
The following does not work:
IndArray={i1,...,im}
SubMatrix=A(IndArray{:})
Thanks in advance for any hints.
0 Comments
Accepted Answer
  Rik
      
      
 on 2 Aug 2021
        I would suggest something like this:
IndArray={i1,...,im}
for dim=(numel(IndArray)+1):ndims(A)
    IndArray{dim}=1:size(A,dim);
end
SubMatrix=A(IndArray{:})
0 Comments
More Answers (2)
  Stephen23
      
      
 on 2 Aug 2021
        
      Edited: Stephen23
      
      
 on 2 Aug 2021
  
      No need for a loop, here is the simple and efficient MATLAB approach:
IndArray = {i1,..,im};
IndArray(1+end:ndims(A)) = {':'};
SubMatrix = A(IndArray{:})
How it works: MATLAB always allows a scalar element on the RHS to be allocated to any number of elements on the LHS. This applies to any array class: numeric, cell (as above), char, string, struct, etc.
  Lionel Pöffel
 on 2 Aug 2021
        1 Comment
  DGM
      
      
 on 2 Aug 2021
				Sorry about that.  I tried reading your other posts to try to figure out what exactly you were trying to do and had the feeling that I had misunderstood the intent.  
See Also
Categories
				Find more on Matrix Indexing in Help Center and File Exchange
			
	Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!