How to split or divide a larger array in to the predetermined size?

1 visualización (últimos 30 días)
My original array is only one dimensional of ordeer 1*15000 and 90% of it consisting zeroes. I want to create smaller arrays where there is non zero values and store them in different array. For example if my original array is [0,0,0,0,6,8,6,0,0,0,0,0,8,8,7,6,87,6,0,0,0] then I want it to split in [6,8,6] and [8,8,7,6,87,6].
I wrote the code to determine the starting and ending position of the non zero element but it is lengthy. Is there any other way?

Respuesta aceptada

Stephen23
Stephen23 el 5 de Jul. de 2016
Editada: Stephen23 el 5 de Jul. de 2016
You can use accumarray to put contiguous groups of non-zeros into one cell array:
>> vec = [0,0,0,0,6,8,6,0,0,0,0,0,8,8,7,6,87,6,0,0,0];
>> idx = vec(:)>0;
>> idy = cumsum(diff([0;idx])>0);
>> out = accumarray(idy(idx),vec(idx),[],@(n){n});
>> out{:}
ans =
6
8
6
ans =
8
8
7
6
87
6
  4 comentarios
kedar Paul
kedar Paul el 5 de Jul. de 2016
@stephen sorry I was not clear, I mean that I want to store the data in matrix form so that I can perform different statistical operation using a for loop. I hope I made myself clear now.
Stephen23
Stephen23 el 5 de Jul. de 2016
It is very simple to loop over the contents of the cell array directly:
for k = 1:numel(out)
out{k}
end
However if you really want to merge the contents of the cell array back into one numeric array then you will need to use option 2, such as padcat:
padcat(out{:})

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Creating and Concatenating Matrices en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by