1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- function [varargout] = spm_unvec(vX,varargin)
- % Unvectorise a vectorised array - a compiled routine
- % FORMAT [varargout] = spm_unvec(vX,varargin)
- % varargin - numeric, cell or structure array
- % vX - spm_vec(X)
- %
- % i.e. X = spm_unvec(spm_vec(X),X)
- % [X1,X2,...] = spm_unvec(spm_vec(X1,X2,...),X1,X2,...)
- %
- % See spm_vec
- %__________________________________________________________________________
- % Copyright (C) 2005-2014 Wellcome Trust Centre for Neuroimaging
- % Karl Friston
- % $Id: spm_unvec.m 6238 2014-10-13 09:38:23Z karl $
- %error('spm_unvec.c not compiled - see Makefile')
- % deal to multiple outputs if necessary
- %--------------------------------------------------------------------------
- if nargout > 1
- varargout = spm_unvec(vX,varargin);
- return
- end
- if numel(varargin) == 1
- X = varargin{1};
- else
- X = varargin;
- end
- % check vX is numeric
- %--------------------------------------------------------------------------
- if ~(isnumeric(vX) || islogical(vX))
- vX = spm_vec(vX);
- end
- % reshape numerical arrays
- %--------------------------------------------------------------------------
- if isnumeric(X) || islogical(X)
- if ndims(X) > 2
- X(:) = full(vX);
- else
- X(:) = vX;
- end
- varargout = {X};
- return
- end
- % fill in structure arrays
- %--------------------------------------------------------------------------
- if isstruct(X)
- f = fieldnames(X);
- for i = 1:numel(f)
- c = {X.(f{i})};
- if isnumeric(c)
- n = numel(c);
- else
- n = spm_length(c);
- end
- c = spm_unvec(vX(1:n),c);
- [X.(f{i})] = deal(c{:});
- vX = vX(n + 1:end);
- end
- varargout = {X};
- return
- end
- % fill in cell arrays
- %--------------------------------------------------------------------------
- if iscell(X)
- for i = 1:numel(X)
- if isnumeric(X{i})
- n = numel(X{i});
- else
- n = spm_length(X{i});
- end
- X{i} = spm_unvec(vX(1:n),X{i});
- vX = vX(n + 1:end);
- end
- varargout = {X};
- return
- end
- % else
- %--------------------------------------------------------------------------
- X = [];
- varargout = {X};
|