I need to remove every other 9 rows of a matrix
Afficher commentaires plus anciens
This should be simple but its giving me some trouble. I have a matrix of 57 rows and 3 columns. This matrix is a condensed set of data from 3 data sets with 19 rows of data each. The first 9 rows of each individual data sets are unneeded and need to be removed. So in the full matrix I need to remove the first 9 rows of data, move down 10 rows, remove the next 9 rows of data, move down another 10 rows, and the remove the next 9 rows of data. Does anyone know how I can do this?
Réponse acceptée
Plus de réponses (3)
Andrei Bobrov
le 26 Juin 2013
Modifié(e) : Andrei Bobrov
le 27 Juin 2013
A = randi(100,57,5); % your data
a = 19*ones(size(A,1)/19,1);
A(bsxfun(@plus,cumsum(a) - a + 1,0:8),:) = [];
Jan
le 26 Juin 2013
A = rand(57,5);
s1 = size(A, 1);
index = zeros(1, s1);
index(1:19:s1) = 1;
index(10:19:s1) = -1;
R = A(logical(cumsum(index)), :);
(not tested)
Matt Kindig
le 26 Juin 2013
Modifié(e) : Matt Kindig
le 26 Juin 2013
So, to confirm, you need to do the following:
- remove rows 1-9 (9 rows)
- retain rows 10-19 (10 rows)
- remove rows 20-28 (9 rows)
- retain rows 29-38 (10 rows)
- remove rows 39-47 (9 rows)
- retain rows 48-57 (10 rows)
I think this should do it:
M = [(1:57)', rand(57,2)]; %random data for illustration
npts = size(M,1);
nremove = 9; %number of rows to remove at once
nretain = 10; %number of rows to retain at once
%which removes to remove
removeRows = cell2mat(arrayfun(@(k) k:(k+nremove-1), 1:(nremove+nretain):npts, 'UniformOutput', false));
removeRows(removeRows>npts)=[]; %ignore rows beyond size of M
M(removeRows,:) = []; %remove these rows
Catégories
En savoir plus sur Spreadsheets dans Centre d'aide et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!