How to copy every 500 rows to a new variable?
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
akshay raj
el 16 de Nov. de 2015
Respondida: Walter Roberson
el 19 de Jun. de 2019
Hi,
I have a [30000 x 57] matrix, I want to copy every new 500 rows to a new variable?
Thanks.
0 comentarios
Respuesta aceptada
Stephen23
el 16 de Nov. de 2015
Editada: Stephen23
el 19 de Jun. de 2019
1 comentario
Ilham Hardy
el 16 de Nov. de 2015
Wow, thanks for the concise explanation.
Now I am really convinced not to dynamically named variables.
Thanks Stephen :)
Más respuestas (4)
Star Strider
el 16 de Nov. de 2015
Editada: Star Strider
el 16 de Nov. de 2015
Another approach:
M = randi(9, 30000, 57); % Create Data
Mr = reshape(M, 50, [], 57); % Reshape
Mr = permute(Mr, [1 3 2]); % Shuffle Dimensions
Mc = mat2cell(Mr, ones(size(Mr,1),1), size(Mr,2), size(Mr,3)); % Create Cell Array
Every element of ‘Mc’, from ‘Mc{1}’ to ‘Mc{50}’ is a different matrix variable. To convert them back into double arrays for calculations, use the cell2mat function.
2 comentarios
Star Strider
el 16 de Nov. de 2015
Thank you!
My code does the same essential task yours does, just differently.
That brings to focus the observation that neither you nor I created 50 ‘new’ variables with our code, but instead created a single cell array with segments of the original matrix that are easier to access and work with, as ‘akshay raj’ essentially requested.
It would seem that reading and understanding the existing Answers would avoid much of the consternation that is too frequently apparent otherwise.
Thorsten
el 16 de Nov. de 2015
Editada: Thorsten
el 16 de Nov. de 2015
Why do you want to create 60 new variables and double the data? That's not a good idea. You can keep your original data and just address the i'th set of your 500 rows using
ind = [1:500] + (i-1)*500;
your_function(X(ind,:));
0 comentarios
Bish Erbas
el 16 de Nov. de 2015
Do you really have to create individual variables for each 500 rows? This approach is not recommended because it is not using the array processing power of MATLAB. The preferred method is to store related data in a single array or a cell array. For example:
A = rand(30000,57);
N = (size(A,1)/500);
cellVar = cell(1,N);
for k = 1:N
cellVar{k} = A(500*(k-1)+1:500*(k-1)+500,:);
end
0 comentarios
Walter Roberson
el 19 de Jun. de 2019
result = squeeze(cellfun(@transpose, num2cell(reshape(YourMatrix.', size(YourMatrix,2), 500, []), [1 2]), 'uniform', 0));
This will give you a 60 x 1 cell array, each entry of which is a 500 x 57 array.
0 comentarios
Ver también
Categorías
Más información sobre Multidimensional Arrays en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!