Delete a column from an array of uncertain size?
1 view (last 30 days)
Show older comments
Hi everyone.. I know there are answers out there regarding removing a column from an array with x dimensions--this much I have no problem doing.
I'm trying to turn some code into a function that I can use to solve the same type of problem with anywhere from 2 to 7 dimensions (or infinite, if I can write a general enough code).
What I have to do, in a certain part of the code, is take an array of grid points and drop the first point on the second dimension.
E.g. if it was a matrix I would write:
newarray = oldarray(:,2:end);
if it was a 4D array I would write:
newarray = oldarray(:,2:end,:,:);
What do you think the most efficient/general way to code this would be?
Thanks!
2 Comments
Accepted Answer
David Young
on 15 Jun 2015
Edited: David Young
on 15 Jun 2015
The trick needed is to use the fact that cell arrays can be expanded into comma-separated lists, so can represent any number of subscripts. It works like this.
Test data:
x = 1 + randi(9); % random no. dimensions from 2 to 10
oldarray = rand(repmat(3, 1, x)); % 3 x 3 x 3 ... array
Computation:
% get cell array of subscript arguments representing whole of oldarray
subs = arrayfun(@(s) {1:s}, size(oldarray));
% change second subscript to start from 2
subs{2} = 2:size(oldarray,2);
% create new array by indexing old array
newarray = oldarray(subs{:});
Check newarray is correct size, and look at one column (noting that trailing ones are always OK regardless of the number of dimensions):
disp(size(oldarray));
disp(size(newarray));
disp(oldarray(1, :, 1, 1, 1, 1, 1, 1, 1, 1, 1));
disp(newarray(1, :, 1, 1, 1, 1, 1, 1, 1, 1, 1));
More Answers (1)
Walter Roberson
on 15 Jun 2015
s = size(oldarray);
[r, c, p] = size(oldarray); %deliberate that 3 outputs are given for array that might be more dimensions
newarray = reshape(oldarray,r,c,p);
newarray = reshape(newarray(:,2:end,:), [r, c-1, s(3:end)]);
That is, the 3 dimensional case covers the rest.
0 Comments
See Also
Categories
Find more on Matrices and Arrays in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!