Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Apr 30th, 2012  |  syntax: None  |  size: 2.13 KB  |  hits: 14  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. structures in matlab
  2. clear all
  3. a1 = struct('data1',rand(12,2),'data2',rand(12,2),'data3',rand(12,3));
  4. a2 = struct('data1',rand(12,2),'data2',rand(12,2),'data3',rand(12,3));
  5. a3 = struct('data1',rand(12,2),'data2',rand(12,2),'data3',rand(12,3));
  6. a4 = struct('data1',rand(12,2),'data2',rand(12,2),'data3',rand(12,3));
  7.        
  8. a(1) = struct('data1',rand(12,2),'data2',rand(12,2),'data3',rand(12,3));
  9. a(2) = struct('data1',rand(12,2),'data2',rand(12,2),'data3',rand(12,3));
  10. a(3) = struct('data1',rand(12,2),'data2',rand(12,2),'data3',rand(12,3));
  11. a(4) = struct('data1',rand(12,2),'data2',rand(12,2),'data3',rand(12,3));
  12.        
  13. cat(1,a.data1)
  14.        
  15. function so3
  16.     a1 = struct('data1',rand(12,2),'data2',rand(12,2),'data3',rand(12,3));
  17.     a2 = struct('data1',rand(12,2),'data2',rand(12,2),'data3',rand(12,3));
  18.     a3 = struct('data1',rand(12,2),'data2',rand(12,2),'data3',rand(12,3));
  19.     a4 = struct('data1',rand(12,2),'data2',rand(12,2),'data3',rand(12,3));
  20.  
  21.     s{1} = struct2cell(a1);
  22.     s{2} = struct2cell(a2);
  23.     s{3} = struct2cell(a3);
  24.     s{4} = struct2cell(a4);
  25.  
  26.     N = numel(fieldnames(a1));
  27.     data = cell([1 N]);
  28.     for i=1:N
  29.         data{i} = cell2mat(cellfun(@(x){x{i}'},s));
  30.     end
  31.  
  32. end
  33.        
  34. % first make some data
  35. foo1 = struct('data1',rand(12,2),'data2',rand(12,2),'data3',rand(12,3));
  36. foo2 = struct('data1',rand(12,2),'data2',rand(12,2),'data3',rand(12,3));
  37. foo3 = struct('data1',rand(12,2),'data2',rand(12,2),'data3',rand(12,3));
  38. foo4 = struct('data1',rand(12,2),'data2',rand(12,2),'data3',rand(12,3));
  39.        
  40. varstarter = 'foo';
  41. varlist = who('-regexp', ['^' varstarter '[0-9]+']);
  42. try
  43.     eval([varstarter '=[' sprintf('%s,',varlist{:}) '];']);
  44. catch
  45.     warning('Could not concatenate variables starting with "%s".',varstarter);
  46. end
  47.        
  48. data1 = cat(1, foo.data1);
  49. data2 = cat(1, foo.data2);
  50. data3 = cat(1, foo.data3);
  51.        
  52. if ~isstruct(foo)
  53.     warning('Variable "%s" is of an unexpected type.',varstarter);
  54. else
  55.     varfields = fieldnames(foo);
  56.     for k=1:length(varfields)
  57.         eval([varfields{k} '=cat(1, ' varstarter '.' varfields{k} ');']);
  58.     end
  59. end
  60.        
  61. varfields = repmat(fieldnames(foo)',2,1);
  62. eval(sprintf(['%s=cat(1,' varstarter '.%s);'],varfields{:}));