diff toolboxes/MIRtoolbox1.3.2/somtoolbox/som_write_data.m @ 0:e9a9cd732c1e tip

first hg version after svn
author wolffd
date Tue, 10 Feb 2015 15:05:51 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_write_data.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,210 @@
+function som_write_data(sData, filename, missing)
+
+%SOM_WRITE_DATA Writes data structs/matrices to a file in SOM_PAK format.
+%
+% som_write_data(data,filename,[missing])
+%
+%  som_write_data(sD,'system.data')
+%  som_write_data(D,'system.data','*')
+%
+%  Input and output arguments ([]'s are optional): 
+%   data        (struct) data struct to be written in the file
+%               (matrix) data matrix
+%   filename    (string) output filename
+%   [missing]   (string) string used to denote missing components (NaNs); 
+%                default is 'NaN'
+%
+% Note that much of the information in the data struct is lost.
+% Typically, when saving data structs into files use the 'save' command.
+%
+% For more help, try 'type som_write_data' or check out online documentation.
+% See also  SOM_READ_DATA, SOM_READ_COD, SOM_WRITE_COD.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_write_data
+%
+% PURPOSE
+%
+% Writes data structs/matrices to a file in SOM_PAK format.
+%
+% SYNTAX
+%
+%  som_write_data(sD,'filename')
+%  som_write_data(D,'filename')
+%  som_write_data(...,'missing')
+%
+% DESCRIPTION
+%
+% This function is offered for compatibility with SOM_PAK, a SOM software
+% package in C. It writes data structs/matrices to a file in SOM_PAK format.
+%
+% See SOM_READ_DATA for a decription of the SOM_PAK data file format. Since
+% the format does not support information on normalizations, that
+% information is lost, as well as the data name. The component names are
+% written on a comment line which begins with '#n' and label names on
+% comment line which begins with '#l', respectively. Any spaces (' ') in the
+% component names and in the label names are replaced with
+% underscores ('_').
+%
+% This function is only offered for compatibility with SOM_PAK. In
+% general, when saving data in files, use 'save filename.mat sData'. This is
+% faster and retains all information of the data struct.
+%
+% The string to use for missing values (NaNs) in the written file can
+% be given with the last argument. Notice that if you use SOM_PAK to
+% read the files, you need to set the SOM_PAK environment variable
+% LVQSOM_MASK_STR accordingly, e.g. to 'NaN' if you use the default
+% replacement. For more information, see the SOM_PAK instructions.
+%
+% REQUIRED INPUT ARGUMENTS
+%
+%  data        (struct or matrix) data to be written
+%  filename    (string) output filename
+%
+% OPTIONAL INPUT ARGUMENTS
+%
+%  missing     (string) string used to denote missing components (NaNs); 
+%               default is 'NaN'
+%
+% EXAMPLES
+%
+% The basic usage is:
+%  som_write_data(sData,'system.data')
+%
+% To write a data matrix to a file in plain SOM_PAK format, give a
+% data matrix as the first argument: 
+%  som_write_data(D,'system.data')
+%
+% By default, all NaNs in the data matrix are written as 'NaN':s. The
+% third argument can be used to change this:
+%  som_write_data(sData,'system.data','+')
+%  som_write_data(sData,'system.data','missing')
+%
+% SEE ALSO
+%
+%  som_read_data    Reads data from an ascii file.
+%  som_read_cod     Read a map from a file in SOM_PAK format.
+%  som_write_cod    Writes data struct into a file in SOM_PAK format.
+
+% Copyright (c) 1997-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 1.0beta ecco 131197
+% Version 2.0beta ecco 030899 juuso 151199
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% check arguments
+
+error(nargchk(2, 3, nargin));  % check no. of input args is correct
+
+% data
+if isstruct(sData)
+  is_struct = 1;
+  D = sData.data;
+else 
+  is_struct = 0;
+  D = sData; 
+end
+[samples dim] = size(D);
+
+% missing
+if nargin == 2, missing = 'NaN'; end
+
+% open output file
+fid = fopen(filename, 'w');
+if fid < 0, error(['Cannot open file ' filename]); end
+
+% check version
+v = version;
+ver_53_or_newer = (str2num(v(1:3)) >= 5.3);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% write data
+
+% write dimension
+
+fprintf(fid, '%d\n', dim);
+
+% write component names as a SOM_PAK comment line
+if is_struct,
+  fprintf(fid,'#n ');                     
+  for i = 1:dim, fprintf(fid, '%s ', strrep(sData.comp_names{i},' ','_')); end
+  fprintf(fid,'\n');                      
+  if ~isempty(sData.label_names)
+    fprintf(fid,'#l ');                     
+    l = length(sData.label_names);
+    for i = 1:l,  fprintf(fid, '%s ', strrep(sData.label_names{i},' ','_')); end
+    fprintf(fid,'\n');                      
+  end
+end
+
+% are there NaNs and/or labels?
+
+has_nans = isnan(sum(D,2)) * (~strcmp(missing, 'NaN'));
+
+has_labels = 0;
+if is_struct
+  [lines numlabs] = size(sData.labels);
+  has_labels = zeros(lines, 1);
+  if ver_53_or_newer
+    has_labels = sum((~(cellfun('isempty', sData.labels))), 2);
+  else
+    for i = 1:lines
+      for j = 1:numlabs
+	if ~isempty(sData.labels{i,j}) 
+	  has_labels(i) = 1; break; 
+	end
+      end
+    end
+  end
+end
+
+% write data
+
+form = [repmat('%g ',[1 dim-1]) '%g\n'];
+
+if ~sum(has_labels) & ~sum(has_nans)    % no NaNs, no labels
+  fprintf(fid, form, D'); 
+elseif ~sum(has_labels)                 % no labels, NaNs
+  fprintf(fid, '%s', strrep(sprintf(form, D'), 'NaN', missing));
+else                                    % labels and NaNs
+  for i = 1:samples
+    if has_nans(i)
+      fprintf(fid, strrep(sprintf('%g ', D(i,:)), 'NaN', missing));
+    else
+      fprintf(fid, '%g ', D(i,:));
+    end
+    
+    if has_labels(i)
+      temp = '';
+      if ver_53_or_newer
+	nonempty = ~(cellfun('isempty', sData.labels(i,:)));
+      else
+	for j = 1:numlabs, nonempty(j) = ~isempty(sData.labels{i, j}); end
+      end
+      labs = char(sData.labels{i, nonempty});
+      labs(:,end + 1) = ' ';
+      temp = reshape(labs',[1 prod(size(labs))]);
+      temp(findstr('  ', temp))='';
+      fprintf(fid, '%s', temp(1:end-1));
+    end
+    fprintf(fid,'\n');
+  end
+end
+
+% close file
+
+if fclose(fid), 
+  error(['Cannot close file ' filename]); 
+else
+  fprintf(2, 'data write ok\n');
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+
+