Populating values in a vector based on function

2 vues (au cours des 30 derniers jours)
Hari krishnan
Hari krishnan le 15 Oct 2018
Commenté : dpb le 16 Oct 2018
I have an excel file as attached. In the second column, i have the 'entry time' and third column have 'exit time'. In the 'exit time', there are few values missing. I am doing an functional operation, which takes the 'entry time' and 'exit time'. When i perform this, i am getting an error "Subscript indices must either be real positive integers or logicals", due to the presence of nan's. Any help to solve this will be appreciated.
real_time_vec = str2double(changed_ts_to_seconds{1,2}(:,5)); %choose good nest data text file
frame_rate_played_video = 8;
colony_data = 'ants_entry_exit_goodnest_14.0164.xlsx';
read_colony_observation_data_goodnest = xlsread(colony_data);
time_data_observation = floor(read_colony_observation_data_goodnest(:,2:3)*60);
entry_times_to_nest = time_from_videos_to_second_convertor(time_data_observation,frame_rate_played_video,real_time_vec);
The function 'time_from_videos_to_second_convertor' is shown below
function [real_time] = time_from_videos_to_second_convertor(time_data_observation,frame_rate_played_video,real_time_vec)
for ii = 1:length(time_data_observation)
frame_id = time_data_observation*frame_rate_played_video;
real_time = real_time_vec(frame_id);
end
  2 commentaires
dpb
dpb le 15 Oct 2018
So, what do you expect for a result when there is the missing value?
Hari krishnan
Hari krishnan le 15 Oct 2018
I just want to keep nan

Connectez-vous pour commenter.

Réponse acceptée

dpb
dpb le 15 Oct 2018
Modifié(e) : dpb le 16 Oct 2018
function [real_time] = time_from_videos_to_second_convertor(time_data_observation,frame_rate_played_video,real_time_vec)
for ii = 1:length(time_data_observation)
frame_id = time_data_observation*frame_rate_played_video;
real_time = real_time_vec(frame_id);
end
  1. in loop on ii, time_data_observation is referring to the whole array, not just single element
  2. is it guaranteed that time_data_observation*frame_rate_played_video is integer even if not NaN
  3. real_time is overwritten every pass thru the loop.
If you can't fix the NaN from happening, probably the simplest fix to your current code would be
real_time=nan(size(time_data_observation)); % initialize to NaN for unknown
for ii = 1:length(time_data_observation)
frame_id = time_data_observation(ii)*frame_rate_played_video;
try % trap index error on missing value
real_time(ii) = real_time_vec(frame_id); % we're ok
catch % on error do nothing, already initialized
end
You could write this without loop as "more Matlab-y" solution and "exercise for Student" if wish a challenge! :) end
  2 commentaires
Hari krishnan
Hari krishnan le 16 Oct 2018
thank you. I tried it writing without the loop. It worked.
dpb
dpb le 16 Oct 2018
+1! :)

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by