-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathf_binlevels2edges.m
45 lines (36 loc) · 1.74 KB
/
f_binlevels2edges.m
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
function [edges, centers] = f_binlevels2edges(indx_binlevels, indx_datatypes, binlevels, datatypes)
% For an array of datatypes, returns bin edges for a desired binlevel
% number
% Input
% - indx_binlevels: [1,num_dim] array with desired binlevel for each
% dimension. The binlevel is used as index in binlevels to retrieve
% the desired number of bins
% - indx_datatypes: [1,num_dim] :double. Datatype index for each dimension.%
% - binlevels: [m,1] :double. Specifies the number of equal-sized bins
% the datatype range [min, max] should be subdivided into
% - datatypes [n,1] :struct. Specifies the datatype
% Output
% - edges: [1,num_dim] cell array, with arrays of bin edges for each dimension
% - centers: [1,num_dim] cell array, with arrays of bin centers for each dimension
% Version
% - 2018/07/13 Uwe Ehret: initial version
% - 2020/02/28: Uwe Ehret, version published in GitHub
% get dimensionality (= number of edge-arrays to create)
num_dim = size(indx_binlevels,2);
% initialize output variables
edges = cell(1,num_dim);
centers = cell(1,num_dim);
% loop over all dimensions
for i = 1 : num_dim
% get parameters for binning
min = datatypes(indx_datatypes(i)).min; % min value for given datatype
max = datatypes(indx_datatypes(i)).max; % max value for given datatype
numbins = binlevels(indx_binlevels(i)); % number of bins for desired binlevel
% create the bins and centers
var_edges = linspace(min, max, numbins+1); % create the bin edges
var_centers = var_edges(1:end-1) + diff(var_edges) / 2; % create the bin centers
% write edges and centers to output
edges{i} = var_edges;
centers{i} = var_centers;
end
end