How can I change a cell array with timepoints in to a continous binary matrix? (for Neural Network Toolbox) I have a 15x1 cell array, in which each cell is another 50x2 cell. The data shows spike-event onsets in seconds for 50 neurons (each row is a neuron). The content looks like this: (XX{1,1}) = {[ 3.4078]} {[ 3.7273]} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {[ 3.4684]} {0×0 double} ... If this data is used for network training, this is the error that I get: Error using trainNetwork (line 140) Invalid training data. Predictors must be a cell array of sequences. The data dimension of all sequences must be the same. Caused by: Error using nnet.internal.cnn.util.TrainNetworkDataValidator/assertValidSequenceInput (line 269) Invalid training data. Predictors must be a cell array of sequences. The data dimension of all sequences must be the same. In order to use this as an input for a LSTM-Network in the Neural Network Toolbox these timepoints needs to be part of a continous spectrum. My idea was to convert this discrete datapoints in to large binary matrix (50x10000) inwhich the columns represent the time, therefore 10 seconds = 10000 columns. At each timepoint a spike occured (e.g. 3.4078) a 1 should be put for the corresponding neuron. I tried indexing the cell array with a time-vector ( t = (0:0.001:10) ) but it didn't work. Can anyone help transforming the data? Thank you.
John Williams answered .
2025-11-20
% XX = original cell array
seqNum = 15;
neuronNum = 50;
% create new cell array
XX2 = cell([seqNum 1]);
for i = 1:seqNum
XX2{i} = zeros(neuronNum, 10000);
currSeq = XX{i};
for j = 1:neuronNum
% convert times into indices
a = round(currSeq{j,1}*10000);
b = round(currSeq{j,2}*10000);
% Index into array of zeros
XX2{i}(j, [a b]) = 1;
end
end