How to save each iteration of a nested for loop into a matrix

4 次查看(过去 30 天)
Basically, what I've done is create a script that pulls all the .edf files from a pre-defined folder, extracts their data (record, which is a matrix of EEG voltages which each row of values corresponding to an EEG sensor), and then places each record matrix into another array 'recordlist'. What I'm working on now is running an analysis on each row of 'record' (so for example, finding the max value of each row) and saving that into another matrix 'result'. My problem is that the nested for loop works independently, but when I try to run the whole script only the last column of 'result' displays, and all previous columns are just zeroes.
PS. using the max function is just a placeholder, I know there is a way to calculate the max of each row!!
cd '/Users/xxx/Documents/Research/LRP/eeg_testfiles/'; %define folder
ename = dir('*.edf'); %find all the files within folder that end with .edf
for ii = 1:length(ename) %i = however many files satisfy '*.edf'
array{ii} = (ename(ii).name); %create array that holds all
%.edf files
[hdr, record] = edfread(ename(ii).name);
%Returns the header information
%and a matrix (record) where each row is the data for that variable
recordlist{ii} = record; %place 'record' of each EEG in array recordlist
result = zeros(size(record,1), ii); %prepare matrix to store results
for jj = 1:size(record,1)
X = recordlist{1,ii}(jj,:); % define row jj of the matrix being analyzed
M = max(X); %perform function on row jj
result(jj,ii) = M; %save M into jjth row, iith column of result
end
end
Thank you in advance!

采纳的回答

Mohith Kulkarni
Mohith Kulkarni 2020-12-7
编辑:Mohith Kulkarni 2020-12-7
You are trying to create a result matrix which stores the max value of each row in each record. In what you are trying to do the result matrix is being recreated again with zeros for every edfread. You can create result cell array for each record instead of a matrix. This way a new cell array element is created for each new file being read and the previous entries are not lost. Refer to the code below:
result{ii} = zeros(size(record,1)); % Instead of result = zeros(size(record,1), ii);
You can then use this specific entry for current edfread in the nested loop. refer to the code below:
result{ii}(jj) = max(X); % In the nested loop, to store the max for each row instead of result(jj,ii) = M;.

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 EEG/MEG/ECoG 的更多信息

标签

产品

Community Treasure Hunt

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

Start Hunting!

Translated by