Concatenate unequal sized arrays produced in a loop

I have a for loop (d = 1:57) for which I am trying to save the results in a single matrix, however each iteration produces a different length of array (e.g 1x58 single, 1x46 single, 1x59 single, ...). It is not possible to know the length of the longest array produced since I'll be running the same loop with various inputs and keeping track of the lengths will be tedious. How can I concatenate the arrays produced from the loop into one matrix perhaps by adding NaNs to the shorter arrays. Some suggested storing the vectors in matrix as result(d,:) which of course gives an error.
Result should have the dimension (57xlength of longest array).

 Accepted Answer

I would use a Cell Array.
for d = 1:57
A{d} = ...
end
Notice the use of curly brackets ‘{}’ to denote the cell array elements.

10 Comments

That does not work since my result matrix is an array; "Cell contents assignment to a non-cell array object."
I can't use mat2cell because I don't know what will be the dimensions after each iteration.
There must be something else about your data that you did not describe. This code runs without error (forcing single-precision):
for d = 1:5
A{d} = single(randi(99, 1, d*10));
end
Thank you, I'd have to check why the problem is arising.
Some error in the code was creating the issue. So now that I have a cell array (with 57 cell arrays in it), is there any way I can convert it to a table or matrix by adding NaN to the shorter-length arrays.
Yes. It resisted my efforts at elegant solutions such as cellfun so loops will have to do. The initial loop changed to store the lengths of the individual vectors as they’re created. The second loop creates the matrix:
for d = 1:5
A{d} = single(randi(99, 1, d*10));
Asz(d,:) = size(A{d}); % Size Of Each Vector
end
Colmax = max(Asz(:,2)); % Maximum # Columns
Amtx = NaN(d,Colmax); % Preallocate
for k1 = 1:d
Amtx(k1,1:Asz(k1,2)) = A{k1}; % Fill Matrix
end
I checked it with my test data and it produces the correct matrix.
Works perfectly! Thank You!
I found this helpful.. thank you

Sign in to comment.

More Answers (0)

Categories

Asked:

SMA
on 9 Nov 2015

Commented:

on 11 Jun 2019

Community Treasure Hunt

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

Start Hunting!