How to save specific rows of a Cell Array?

9 visualizaciones (últimos 30 días)
Sherwin
Sherwin el 8 de En. de 2021
Comentada: Sherwin el 9 de En. de 2021
Hi,
I have a cell array O which stores the output of an iterative algorithm. After each 1000 iteration, I want to save the last 1000 rows of O in a .mat file and append it to the previously saved O,
O is a 20000x2 cell array. Each cell in the first column consists of a 95x4 cell which again consists of 1x5 cells. The second column is a 1x1 matrix.
In the 1000th iteration, I want to save the first 1000 rows of O in a .mat file.
In the 2000th iteration, I want to save the second 1000 rows of O (1001th row to 2000th row) and append it to the previously saved .mat file.
In the 3000th iteration, I want to save the third 1000 rows of O (2001th row to 3000th row) and append it to the same .mat file.
and so on......
I use the following code:
if rem(it,1000) == 0
save('O.mat',O(it-999:it), '-append');
end
and I receive the following error:
Can someone please help me with this?
Error using save
Must be a string scalar or character vector.
Error in HMainCode (line 90)
save('O.mat',O(it-999:it), '-append');

Respuesta aceptada

Cris LaPierre
Cris LaPierre el 8 de En. de 2021
Editada: Cris LaPierre el 8 de En. de 2021
When using save, the second input must be a variable name, not data. The variable name is text (string scalar or character vector.
Here is a description of what -append does from the save documentation page.
save(filename,variables,'-append') adds new variables to an existing file. If a variable already exists in a MAT-file, then save overwrites it with the value in the workspace.
For ASCII files, '-append' adds data to the end of the file.
Perhaps this example on the matfile documentation page is what you want?
  6 comentarios
Cris LaPierre
Cris LaPierre el 9 de En. de 2021
This example worked for me.
C=1:100;
save C.mat C
m = matfile('C.mat','Writable',true);
for a=2:5
C(((a-1)*100+1):100*a) = (C(end)+1):100*a;
m.C= [m.C C(end-99:end)];
end
% View last 10 values
z = m.C;
z(end-10:end)
ans = 1×11
490 491 492 493 494 495 496 497 498 499 500
Sherwin
Sherwin el 9 de En. de 2021
Thank you so much for your help.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Workspace Variables and MAT-Files en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by