- The intervals before the first stimulus and after the last stimulus are still divided into 1s and 3s. You can adjust that by moving those outside the loop.
- It can happen that you have an odd number of intervals between two stimuli. In the first line inside the loop, use floor or ceil, if you want to give the extra place to a 1 or 3, respectively.
fill and replicate numbers in the matrix
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
EK
el 23 de Abr. de 2023
Comentada: EK
el 23 de Abr. de 2023
Hi,
I am trying to refill excell matrix with numbers and would like to ask if there are easy way to do it in matlab
I have matrices of 4 columns that log stimuli representation in time (logfile, attached below ). The rows are time and the columns are events. The first column logs stimuli id in time. (No stimulus =0, stimulus : 1 2 3 4 5 or 6) The second column logs stimulus presentation (0=no stimulus, 2=stimulus) column 4 logs Id of repetition for 6 stimuli.
I need to mark in column2 pre stimulus interval =1 and poststimulus interval=3. For that I need to replace zeros with 1 before stimulus presentation (row 1 to 95 and then devide and replace first half of the rows after the stimulus with 3 (post stimulus interval) and another half with 1 ( pre stimulus interval) as in an example file attached below. in the column 3 I need to add Ids of repeats of each trial write it in each row (pre stimulus + stimulus+ poststimulus) as in example file. Could anyone help with this?
0 comentarios
Respuesta aceptada
chicken vector
el 23 de Abr. de 2023
Editada: chicken vector
el 23 de Abr. de 2023
Then is just a metter of manipulation and rewrite on the excel file.
data = readmatrix("logfile-20.4.23.xlsx");
secondColumn = abs(data(:,2)' - 2) / 2;
% Method to extract indces of consecutive stimuli [credits @KSSV]:
ad0 = zeros(size(secondColumn)) ;
ad0(logical(secondColumn)) = find(secondColumn) ;
ii = zeros(size(ad0));
jj = ad0 > 0;
ii(strfind([0,jj(:)'],[0 1])) = 1;
idx = cumsum(ii).*jj;
indeces = accumarray( idx(jj)',ad0(jj)',[],@(x){x'});
% Change data:
for j = 1 : length(indeces)
midIdx = floor(sum(indeces{j}([1,end])/2));
data(indeces{j}(1):midIdx,2) = 3;
data(midIdx+1:indeces{j}(end),2) = 1;
end
% Save to Excel:
writematrix(data,filename);
Two remarks:
Más respuestas (0)
Ver también
Categorías
Más información sobre Spreadsheets en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!