Build an array with different column lengths

Have one large data set (3333x1 double) and am trying to section out rows based on certain index values. If I have say 10 index pairs (beginning and end row) that I want to section out,each with different lengths how can I build one new nx10 matrix?
I keep getting subscripted assignment mismatches and similar errors when I try things like:
for i = 1:length(indices)
newData(:,i) = olddata(indexstart(i):indexstop(i),:);
end

Answers (1)

Matt J
Matt J on 15 Aug 2016
Edited: Matt J on 15 Aug 2016
Usually you would store such a result as a cell array,
newData=cell(1, length(indices));
for i = 1:length(indices)
newData{i} = olddata(indexstart(i):indexstop(i));
end
If it needs to be a numeric array, you need to decide what will go in the missing spots.

4 Comments

SO this will give me one cell array with multiple columns? or multiple cells each with a column in it? How would I achieve the former?
Matt J
Matt J on 15 Aug 2016
Edited: Matt J on 15 Aug 2016
SO this will give me one cell array with multiple columns? or multiple cells each with a column in it?
Both. A cell array consists of multiple cells. In this case, the cell array that gets created is 1xlength(indices). In other words, it has N=length(indices) columns.
The content of each of the N cells is a numeric vector from olddata. It will be a numeric column vector if your olddata was also a column vector.
I get a 1x10 array with each cell having one column in it. do I need to nest this newdata into another cell array or something?
Matt J
Matt J on 15 Aug 2016
Edited: Matt J on 15 Aug 2016
Your needs, and what you plan to do with this data later, are completely hidden from me. However, I can't imagine many situations where you couldn't use the 1x10 cell array as is.

Sign in to comment.

Asked:

on 15 Aug 2016

Edited:

on 15 Aug 2016

Community Treasure Hunt

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

Start Hunting!