Mercurial > hg > ltpda
diff m-toolbox/classes/+utils/@math/randelement.m @ 0:f0afece42f48
Import.
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Wed, 23 Nov 2011 19:22:13 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/m-toolbox/classes/+utils/@math/randelement.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,54 @@ +% RANDELEMENT(VECTOR,J) returns J random samples chosen in the VECTOR array. +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% DESCRIPTION: RANDELEMENT(VECTOR,N) returns N random samples chosen in the +% VECTOR array. If VECTOR is a scalar, +% than it answers with N samples from +% 1:1:VECTOR. +% +% CALL: out = randelement(arr, j) +% +% INPUTS: arr - numerical vector array or cell vector array; can be +% single line or single column. +% j - number of samples to extract +% +% OUTPUTS: out - numerical vector array or cell vector array, shaped as +% the input 'arr', containing j elements chosen among +% those included in 'arr'. +% +% VERSION: $Id: randelement.m,v 1.5 2009/08/10 00:49:50 nicola Exp $ +% +% HISTORY: 06-02-2008 N Tateo +% Creation +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +function out = randelement(arr, j) + + if nargin < 2 + error('randelement:tooFewInputs','The randelement function requires two input arguments.'); + elseif ~isa(arr,'double') && ~isa(arr,'cell') + error('randelement:wrongInput','The input to the randelement function must be a numerical or cell array.') + elseif ~isvector(arr) + error('randelement:wrongShape','The input to the randelement function must be a vector.') + end + + N = length(arr); + if N==1 + if iscell(arr), arr = num2cell([1:1:arr{1}]); + else arr = [1:1:arr]; + end + N = length(arr); + end + out = arr(randi(N,1,j)); + + if size(arr,1)==1 % reshape as a row vector + out = reshape(out,1,[]); + else % reshape as a column vector + out = reshape(out,[],1); + end + +end +% END +