Append each updated value of the same for loop variable to .mat file

조회 수: 9 (최근 30일)
Gulce Lale
Gulce Lale 2020년 11월 29일
댓글: Mario Malic 2020년 11월 30일
I want to append same variable with the different updated values to an existing .mat file. When I use -append, it only replaces the existing value, and I can always see the final updated value.
I am trying to save each random_blink value to the random_blink.mat file. Am I missing something or could anyone know how to fix this code ?
for i = 1:video_number
vidName = video_name{i+1};
vidPath = strcat(videosPathToBeEdited, vidName);
V= VideoReader(vidPath);
RGB= readFrame(V);
imshow(RGB);
%%here goes the saving to .mat file code
xmin=0.9;
xmax=1.5;
n=1;
random_blink = xmin+rand(1,n)*(xmax-xmin);
save('random_blink.mat','random_blink','-append','-v7.3');
end

답변 (1개)

Mario Malic
Mario Malic 2020년 11월 29일
Hello,
I wouldn't know how append option works in detail, but It overwrites the variable in your case. Better option is to preallocate a variable, fill the data in the for loop and save it when it ends.
random_blink = zeros(video_number,1);
for i = 1:video_number
vidName = video_name{i+1};
vidPath = strcat(videosPathToBeEdited, vidName);
V= VideoReader(vidPath);
RGB= readFrame(V);
imshow(RGB);
%%here goes the saving to .mat file code
xmin=0.9;
xmax=1.5;
n=1;
random_blink(i) = xmin+rand(1,n)*(xmax-xmin);
end
save('random_blink.mat','random_blink');
  댓글 수: 4
Mario Malic
Mario Malic 2020년 11월 30일
편집: Mario Malic 2020년 11월 30일
Well, I can't help with little information I have from this post, this is not efficient for me. Variable blink_time, is a cell, therefore, an element of it can contain a vector (which I don't see defined in this part) that may cause something like this that could happen, as explained in the comment above.
starting_second(i,1) = blink_time{i+1} - random_blink(i);
An example for the loading, deleting and saving.
clear
a = rand(5);
b = rand(3);
save('file.mat', 'a', 'b');
clear a b % removes a and b from workspace
load workspace.mat % now a and b are in workspace
a(1, :) = zeros([1,5]);
% a(1,:) = []; % will remove the whole row
save ('file.mat', 'a', 'b');
Mario Malic
Mario Malic 2020년 11월 30일
I'd suggest to:
  • Revert back to old code and try to do what you want from there.
  • Fix your variable types (If your variable has only the numeric values, then cell array is not the data type you should use)
  • Consider if your indexing issue - i+1 does what you want to
I'm afraid that I can't help further as the issue is not clear to me and guessing what the code does is not great.
Will reply to this one: 'I just want to store each value of random_blink value when I run the code which will give me 26 values since I have 26 inputs. I need to store the values because I will use them later to calculate another value in another script,..'. If you save a variable a that is an array with 26 rows, you load it and call the function for each element of a.
You should visit MATLAB Onramp to get you through indexing and variable types.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Function Creation에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by