Index slice of ND array of unknown dimension

25 views (last 30 days)
Let's say I have a 3D array A, and I want to remove a slice:
A(i,:,:) = [];
But what if I don't know the dimension of the array beforehand? Just doing
A(i,:) = [];
Is valid, but reshapes the array into a 2D matrix.
I was thinking something like:
A(i,indices{:}) = [];
but I don't think you can put a colon operator in a cell.

Accepted Answer

Stephen23 on 12 Jun 2017
Edited: Stephen23 on 12 Jun 2017
If you do not know the size of the array before hand then you can call subsasgn directly. The function subsasgn is the actual function that MATLAB calls whenever you assign to an array using the indexing convenience operators () or {}, e.g. X(1) = 2, in just the same way that 1+2 is just a convenience operator for plus(1,2). We can also call subasgn directly, just like we could call plus if we so wished.
Here is a simple example of removing one row of A without hard-coding how many dimensions it has:
>> A = rand(5,4,3,2);
>> S.subs = repmat({':'},1,ndims(A));
>> S.subs{1} = 3; % the third row
>> S.type = '()';
>> B = subsasgn(A,S,[]);
>> size(B)
ans =
4 4 3 2
Stephen23 on 26 Mar 2020
Edited: Stephen23 on 26 Mar 2020
@Daniel Plotnick: you should put that as an Answer, so other users could vote for it.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!