File: URandSel.m

package info (click to toggle)
psychtoolbox-3 3.0.19.14.dfsg1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 86,796 kB
  • sloc: ansic: 176,245; cpp: 20,103; objc: 5,393; sh: 2,753; python: 1,397; php: 384; makefile: 193; java: 113
file content (27 lines) | stat: -rw-r--r-- 944 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function sel = URandSel(in,n)
% sel = RandSel(in,n)
%   if N is a scalar
%     randomly selects N elements from set IN, each element from IN will
%     be selected up to one time (so sampling without replacing).
%     Output is of size 1xN
%   if N is a vector
%     randomly selects prod(N) elements from set IN, without replacing. N
%     specifies the shape of the output, e.g., if N=[10 10 5], SEL will be
%     a 10x10x5 matrix
%   IN can be of any datatype and can have any number of dimensions and
%   elements

% 2008-08-27 DN Wrote it
% 2012-06-13 DN Can now also return shaped inputs through non-scalar n input

if isscalar(n)
    nElem = n;
    n     = [1,n];
else
    nElem = prod(n);
end

psychassert(nElem<=numel(in),'More return elements requested (prod(n): %d) than number of elements in input (numel(in): %d)',nElem,numel(in));

selind  = NRandPerm(numel(in),nElem);
sel     = reshape(in(selind),n);