Adamosphere
Adamosphere

Reputation: 77

Maintaining original order and dimensions of a 3D matrix while using sort

I'm working with a fairly large 3D matrix (32x87x378), and I want to be able to extract every Nth element of a matrix, while keeping them in the same order. Similar to a previous question I asked: Matlab: Extracting Nth element of a matrix, while maintaining the original order of matrix

The method I was given was quite practical (and simple) and works well in most instances. For a random (1x20) matrix, where I wanted every 5th value, beginning with 4 and 5 (so that I am left with a 1x8 matrix (ab) of elements 4,5,9,10,14,15,19,20). It is done as follows:

r = rand(1,20);
n = 5;
ab = r(sort([4:n:numel(r) 5:n:numel(r)]))

My question is, how can this method be used for a 3D matrix r for it's 3rd dimension (or can it?), such as this:

r = rand(2,5,20);

It should be fairly simple, such as this:

n = 5;
ab = r(sort([4:n:numel(r) 5:n:numel(r)],3));

However, this will then give me a 1x80 matrix, as it does not preserve the original dimensions. Is there a way to correct this using the sort function? I'm also open to other suggestions, but I just want to be sure I am not missing anything.

Thanks in advance.

Upvotes: 1

Views: 66

Answers (1)

Divakar
Divakar

Reputation: 221524

See if this is what you are after -

ab = r(:,:,sort([4:n:size(r,3) 5:n:size(r,3)]))

Upvotes: 1

Related Questions