5.0
5.0 | 1 rating Rate this file 5 Downloads (last 30 days) File Size: 1.49 KB File ID: #40712 Version: 1.0

Convert from a structure of arrays into an array of structures

by

 

converts from a structure, where each field contains an Nx1 array, into an 1xN array of structures

| Watch this File

File Information
Description

Converts from a structure, where each field contains an Nx1 array, into an 1xN array of structures, where each field contains 1 value.

I decided to create and share this after not finding a readily available answer on the internet; though I suspect SOMEONE out there has already solved this issue.

USAGE:
    S = structofarrays2arrayofstructs(A) assumes that A is a struct, with each field
       containing Nx1 (columns) of values. (theoretically NxM values, where M may vary). This results in an Nx1 array of
       structs, each containing 1 (or M) values.
     
  Example
    >> A.flower={'Daisy';'Rose';'Violet'};
    >> A.color={'white';'red';'violet'};
   
    >> S = structofarrays2arrayofstructs(A)
   
    S =
       1x3 struct array with fields:
           flower
           color
         
    >> S(2)
    ans =
         flower: 'Rose'
          color: 'red'

Note, Any cells it encounters are unwrapped.

In a test, with 6 fields, each with 377670x1 values (mixed, Cells of chars and arrays of Double), it took ~20 seconds to convert.

MATLAB release MATLAB 7.13 (R2011b)
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (1)
17 Apr 2015 Jan Berling

Thanks for this helpful function! With column based (1xN) arrays it doesn't work, because of exceeded matrix dimensions. (The number of elements is taken from the input arrays, not the number of rows.)
For my needs I have changed it to work with Column based (1xN) arrays.
Could be useful to add a flag which lets users choose row or column based arrays.

Contact us