Converting string to integer - indexing and multiple trials

20 views (last 30 days)
I have 120 trials in one Matlab file, all trials are separate within the file and look similar to that of trial1.mat (attached). I am importing this Matlab file into Python and indexing into the correct spot with
cue_times = trial(['BehavioralCodes']['CodeTimes'], dtype=int)
**I know this is not a Python platform, and that is not my question, I am merely explaining what I'm doing when I get the error I am getting.**
I get the error that the list indices must be integers or slices, not str
I need to convert 'CodeTimes' within 'BehavioralCodes' in each trial (each trial is saved individually like trial1) from a string to an integer.
I have tried:
code_times = str2num('CodeTimes') but that gives me an empty array so I am definitely doing something wrong.
I am not sure how to index into the correct space and then to include all trials (perhaps a for loop?). Any help would be greatly appreciated!

Accepted Answer

Askic V
Askic V on 5 Mar 2023
Edited: Askic V on 5 Mar 2023
If you look into your data in Matlab, you will see that CodeTimes is actually an array of doubles and not strings:
cc = load (websave('trial1.mat', 'https://www.mathworks.com/matlabcentral/answers/uploaded_files/1315225/trial1.mat'));
code_times = cc.Trial1.BehavioralCodes.CodeTimes;
code_numbers = cc.Trial1.BehavioralCodes.CodeNumbers;
vpa(code_times(1:5),6) % show first 5 elements
ans = 
code_numbers (1:5)
ans = 5×1
9 20 24 30 34
% check type
class(code_times)
ans = 'double'
class(code_numbers)
ans = 'double'
In Matlab you can use function round to round to the neareast integer:
code_times_int = round(code_times);
code_numbers_int = round(code_numbers);
% show first 5 elements
code_times_int(1:5)
ans = 5×1
7 750 862 923 3889
code_numbers_int(1:5)
ans = 5×1
9 20 24 30 34
If round is not what you want, then check
help floor
FLOOR Round towards minus infinity. FLOOR(X) rounds the elements of X to the nearest integers towards minus infinity. See also ROUND, CEIL, FIX. Documentation for floor doc floor Other uses of floor codistributed/floor duration/floor sym/floor datetime/floor gpuArray/floor tall/floor dlarray/floor matlab/floor
help ceil
CEIL Round towards plus infinity. CEIL(X) rounds the elements of X to the nearest integers towards infinity. See also FLOOR, ROUND, FIX. Documentation for ceil doc ceil Other uses of ceil codistributed/ceil dlarray/ceil gpuArray/ceil sym/ceil datetime/ceil duration/ceil matlab/ceil tall/ceil
  3 Comments

Sign in to comment.

More Answers (0)

Products


Release

R2022b

Community Treasure Hunt

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

Start Hunting!