nk 1.0.0
C++ Numerical Computing Runtime
Loading...
Searching...
No Matches
datafun.hpp
Go to the documentation of this file.
1// src/builtin/include/nk/builtin/datafun.hpp
2//
3// Pure C++ Data analysis, reductions, random number generation, set operations.
4#pragma once
5
6#include <memory_resource>
7#include <string>
8#include <tuple>
9#include <nk/value/value.hpp>
10#include <nk/ops/rng.hpp>
11
12namespace nk::builtin {
13
16
17
18using ::nk::ops::RngContext;
19using ::nk::ops::rand;
20using ::nk::ops::randn;
21using ::nk::ops::randND;
22using ::nk::ops::randnND;
23using ::nk::ops::randi;
24using ::nk::ops::randperm;
25
32
33// ── Reductions ──────────────────────────────────────────────────────────────
34
35// ── Reductions ──────────────────────────────────────────────────────────────
36
42Value sum(const Value &x, std::pmr::memory_resource *mr = nullptr);
43
50Value sum(const Value &x, int dim, std::pmr::memory_resource *mr = nullptr);
51
57Value prod(const Value &x, std::pmr::memory_resource *mr = nullptr);
58
65Value prod(const Value &x, int dim, std::pmr::memory_resource *mr = nullptr);
66
72Value mean(const Value &x, std::pmr::memory_resource *mr = nullptr);
73
80Value mean(const Value &x, int dim, std::pmr::memory_resource *mr = nullptr);
81
87std::tuple<Value, Value> max(const Value &x, std::pmr::memory_resource *mr = nullptr);
88
94std::tuple<Value, Value> max(const Value &x, int dim, std::pmr::memory_resource *mr = nullptr);
95
101Value max(const Value &a, const Value &b, std::pmr::memory_resource *mr = nullptr);
102
108std::tuple<Value, Value> maxOmitNan(const Value &x, int dim, std::pmr::memory_resource *mr = nullptr);
109
115Value maxOmitNanBinary(const Value &a, const Value &b, std::pmr::memory_resource *mr = nullptr);
116
122std::tuple<Value, Value> min(const Value &x, std::pmr::memory_resource *mr = nullptr);
123
129std::tuple<Value, Value> min(const Value &x, int dim, std::pmr::memory_resource *mr = nullptr);
130
136Value min(const Value &a, const Value &b, std::pmr::memory_resource *mr = nullptr);
137
143std::tuple<Value, Value> minOmitNan(const Value &x, int dim, std::pmr::memory_resource *mr = nullptr);
144
150Value minOmitNanBinary(const Value &a, const Value &b, std::pmr::memory_resource *mr = nullptr);
151
157Value cumsum(const Value &x, std::pmr::memory_resource *mr = nullptr);
158
164Value cumsum(const Value &x, int dim, std::pmr::memory_resource *mr = nullptr);
165
171Value cumprod(const Value &x, std::pmr::memory_resource *mr = nullptr);
172
178Value cumprod(const Value &x, int dim, std::pmr::memory_resource *mr = nullptr);
179
185Value cummax(const Value &x, std::pmr::memory_resource *mr = nullptr);
186
192Value cummax(const Value &x, int dim, std::pmr::memory_resource *mr = nullptr);
193
199Value cummin(const Value &x, std::pmr::memory_resource *mr = nullptr);
200
206Value cummin(const Value &x, int dim, std::pmr::memory_resource *mr = nullptr);
207
212Value diff(const Value &x, std::pmr::memory_resource *mr = nullptr);
213
220Value diff(const Value &x, int n, int dim = 0, std::pmr::memory_resource *mr = nullptr);
221
227Value anyOf(const Value &x, int dim = 0, std::pmr::memory_resource *mr = nullptr);
228
234Value allOf(const Value &x, int dim = 0, std::pmr::memory_resource *mr = nullptr);
235
236// ── Random Number Generation ────────────────────────────────────────────────
237// See RngContext-taking declarations re-exported at header top.
238
240enum class HistBinMethod {
241 Auto,
242 Scott,
243 Fd,
244 Integers,
245 Sturges,
246 Sqrt
247};
248
250enum class HistNorm {
251 Count,
252 Probability,
253 CountDensity,
254 Pdf,
255 CumCount,
256 Cdf
257};
258
261 HistBinMethod method = HistBinMethod::Auto;
262 bool hasNumBins = false;
263 double numBins = 0.0;
264 bool hasBinWidth = false;
265 double binWidth = 0.0;
266 bool hasBinLimits = false;
267 double limLo = 0.0;
268 double limHi = 0.0;
269};
270
271// ── Set Operations & Discrete Analysis ──────────────────────────────────────
272
279Value unique(const Value &x, std::pmr::memory_resource *mr = nullptr, bool stable = false);
280
286Value uniqueRows(const Value &x, std::pmr::memory_resource *mr = nullptr, bool stable = false);
287
294std::tuple<Value, Value, Value> uniqueWithIndices(const Value &x, std::pmr::memory_resource *mr = nullptr, bool stable = false, bool last = false);
295
302std::tuple<Value, Value, Value> uniqueRowsWithIndices(const Value &x, std::pmr::memory_resource *mr = nullptr, bool stable = false, bool last = false);
303
310Value ismember(const Value &a, const Value &b, std::pmr::memory_resource *mr = nullptr);
311
318std::pair<Value, Value> ismemberComplex(const Value &a, const Value &b, bool wantLoc, std::pmr::memory_resource *mr);
319
327Value setUnion(const Value &a, const Value &b, std::pmr::memory_resource *mr = nullptr, bool stable = false);
328
336Value setIntersect(const Value &a, const Value &b, std::pmr::memory_resource *mr = nullptr, bool stable = false);
337
345Value setDiff(const Value &a, const Value &b, std::pmr::memory_resource *mr = nullptr, bool stable = false);
346
353Value setxor(const Value &a, const Value &b, std::pmr::memory_resource *mr = nullptr);
354
360Value discretize(const Value &x, const Value &edges, std::pmr::memory_resource *mr = nullptr);
361
367Value histc(const Value &x, const Value &edges, std::pmr::memory_resource *mr = nullptr);
368
374Value histcounts(const Value &x, const Value &edges, std::pmr::memory_resource *mr = nullptr);
375
382Value histcounts(const Value &x, const Value &edges, HistNorm norm, std::pmr::memory_resource *mr = nullptr);
383
389Value histcountsAutoEdges(const Value &x, const HistBinSpec &spec, std::pmr::memory_resource *mr = nullptr);
390
395Value allunique(const Value &x, std::pmr::memory_resource *mr = nullptr);
396
401Value numunique(const Value &x, std::pmr::memory_resource *mr = nullptr);
402
409Value ismembertol(const Value &a, const Value &s, double tol = 1e-6, std::pmr::memory_resource *mr = nullptr);
410
416Value uniquetol(const Value &x, double tol = 1e-6, std::pmr::memory_resource *mr = nullptr);
417
418// ── Grouping Operations ─────────────────────────────────────────────────────
419
425
437FindgroupsResult findgroups(const Value &g, std::pmr::memory_resource *mr = nullptr);
438
445
456GroupcountsResult groupcounts(const Value &g, std::pmr::memory_resource *mr = nullptr);
457
464
480 const std::string &method,
481 std::pmr::memory_resource *mr = nullptr);
482
494Value grouptransform(const Value &A, const Value &G,
495 const std::string &method,
496 std::pmr::memory_resource *mr = nullptr);
497
508
523Value accumarray(const Value &subs, const Value &vals, Span<const size_t> outShape,
524 AccumReducer op = AccumReducer::Sum, double fillVal = 0.0,
525 std::pmr::memory_resource *mr = nullptr);
526
527
529} // namespace nk::builtin
Core MATLAB-compatible multidimensional array and scalar value type.
Definition value.hpp:61
GroupcountsResult groupcounts(const Value &g, std::pmr::memory_resource *mr=nullptr)
Count elements per group ([C, GR, P] = groupcounts(g)).
Value setIntersect(const Value &a, const Value &b, std::pmr::memory_resource *mr=nullptr, bool stable=false)
Set intersection of two arrays (intersect(a, b)).
std::tuple< Value, Value, Value > uniqueWithIndices(const Value &x, std::pmr::memory_resource *mr=nullptr, bool stable=false, bool last=false)
Unique values with index mappings ([C, ia, ic] = unique(x)).
Value grouptransform(const Value &A, const Value &G, const std::string &method, std::pmr::memory_resource *mr=nullptr)
Group transformation (grouptransform(A, G, method)).
Value diff(const Value &x, std::pmr::memory_resource *mr=nullptr)
Differences between adjacent elements (diff(x)).
std::tuple< Value, Value, Value > uniqueRowsWithIndices(const Value &x, std::pmr::memory_resource *mr=nullptr, bool stable=false, bool last=false)
Unique rows with index mappings ([C, ia, ic] = unique(x, 'rows')).
Value setDiff(const Value &a, const Value &b, std::pmr::memory_resource *mr=nullptr, bool stable=false)
Set difference (setdiff(a, b)).
Value cummin(const Value &x, std::pmr::memory_resource *mr=nullptr)
Cumulative minimum of array elements (cummin(x)).
Value unique(const Value &x, std::pmr::memory_resource *mr=nullptr, bool stable=false)
Unique values in array (unique(x)).
Value discretize(const Value &x, const Value &edges, std::pmr::memory_resource *mr=nullptr)
Groups numeric data into bins (discretize(x, edges)).
std::tuple< Value, Value > max(const Value &x, std::pmr::memory_resource *mr=nullptr)
Largest elements in array.
Value maxOmitNanBinary(const Value &a, const Value &b, std::pmr::memory_resource *mr=nullptr)
Element-wise maximum of two arrays omitting NaNs (max(a, b, 'omitnan')).
Value setxor(const Value &a, const Value &b, std::pmr::memory_resource *mr=nullptr)
Set exclusive OR (setxor(a, b)).
Value setUnion(const Value &a, const Value &b, std::pmr::memory_resource *mr=nullptr, bool stable=false)
Set union of two arrays (union(a, b)).
Value cumprod(const Value &x, std::pmr::memory_resource *mr=nullptr)
Cumulative product of array elements (cumprod(x)).
Value ismembertol(const Value &a, const Value &s, double tol=1e-6, std::pmr::memory_resource *mr=nullptr)
Membership test within numerical tolerance (ismembertol(a, s, tol)).
Value prod(const Value &x, std::pmr::memory_resource *mr=nullptr)
Product of array elements along first non-singleton dimension (prod(x)).
Value sum(const Value &x, std::pmr::memory_resource *mr=nullptr)
Sum of array elements along first non-singleton dimension (sum(x)).
Value anyOf(const Value &x, int dim=0, std::pmr::memory_resource *mr=nullptr)
True if any element along dimension is nonzero (any(x, dim)).
Value numunique(const Value &x, std::pmr::memory_resource *mr=nullptr)
Number of unique elements in array (numunique(x)).
std::tuple< Value, Value > min(const Value &x, std::pmr::memory_resource *mr=nullptr)
Smallest elements in array.
Value uniquetol(const Value &x, double tol=1e-6, std::pmr::memory_resource *mr=nullptr)
Unique elements within numerical tolerance (uniquetol(x, tol)).
Value minOmitNanBinary(const Value &a, const Value &b, std::pmr::memory_resource *mr=nullptr)
Element-wise minimum of two arrays omitting NaNs (min(a, b, 'omitnan')).
Value allOf(const Value &x, int dim=0, std::pmr::memory_resource *mr=nullptr)
True if all elements along dimension are nonzero (all(x, dim)).
Value ismember(const Value &a, const Value &b, std::pmr::memory_resource *mr=nullptr)
Tests if array elements are members of set (ismember(a, b)).
GroupsummaryResult groupsummary(const Value &A, const Value &G, const std::string &method, std::pmr::memory_resource *mr=nullptr)
Per-group reduction ([B, BG, BC] = groupsummary(A, G, method)).
Value cummax(const Value &x, std::pmr::memory_resource *mr=nullptr)
Cumulative maximum of array elements (cummax(x)).
std::pair< Value, Value > ismemberComplex(const Value &a, const Value &b, bool wantLoc, std::pmr::memory_resource *mr)
Tests membership for complex/general types with location indices ([lia, loc] = ismember(....
AccumReducer
Built-in reducers recognised by accumarray.
Definition datafun.hpp:499
Value allunique(const Value &x, std::pmr::memory_resource *mr=nullptr)
True if all elements in array are unique (allunique(x)).
Value uniqueRows(const Value &x, std::pmr::memory_resource *mr=nullptr, bool stable=false)
Unique rows of 2-D matrix (unique(x, 'rows')).
Value histc(const Value &x, const Value &edges, std::pmr::memory_resource *mr=nullptr)
Histogram count of data into bins (histc(x, edges)).
Value accumarray(const Value &subs, const Value &vals, Span< const size_t > outShape, AccumReducer op=AccumReducer::Sum, double fillVal=0.0, std::pmr::memory_resource *mr=nullptr)
Group-by reduction (A = accumarray(subs, vals, sz, fn, fillVal)).
HistNorm
Histogram normalization type.
Definition datafun.hpp:250
HistBinMethod
Binning method for histograms.
Definition datafun.hpp:240
std::tuple< Value, Value > minOmitNan(const Value &x, int dim, std::pmr::memory_resource *mr=nullptr)
Smallest elements in array along dimension omitting NaNs (min(x, [], dim, 'omitnan')).
std::tuple< Value, Value > maxOmitNan(const Value &x, int dim, std::pmr::memory_resource *mr=nullptr)
Largest elements in array along dimension omitting NaN values (max(x, [], dim, 'omitnan')).
Value histcounts(const Value &x, const Value &edges, std::pmr::memory_resource *mr=nullptr)
Computes histogram bin counts (histcounts(x, edges)).
Value histcountsAutoEdges(const Value &x, const HistBinSpec &spec, std::pmr::memory_resource *mr=nullptr)
Computes histogram with automatic bin edges selection (histcounts(x, spec)).
FindgroupsResult findgroups(const Value &g, std::pmr::memory_resource *mr=nullptr)
Assign 1-based group IDs ([G, ID] = findgroups(g)).
Value mean(const Value &x, std::pmr::memory_resource *mr=nullptr)
Mean (arithmetic average) of array elements (mean(x)).
Value cumsum(const Value &x, std::pmr::memory_resource *mr=nullptr)
Cumulative sum of array elements (cumsum(x)).
@ Prod
@prod (multiplicative identity 1).
Definition datafun.hpp:503
@ Sum
@sum (additive identity 0).
Definition datafun.hpp:500
@ All
@all (logical AND).
Definition datafun.hpp:506
@ Any
@any (logical OR).
Definition datafun.hpp:505
Result of findgroups — [G, ID].
Definition datafun.hpp:421
Value G
Group index per element (shape of input; NaN = missing).
Definition datafun.hpp:422
Value ID
Column of unique non-NaN values (sorted ascending).
Definition datafun.hpp:423
Result of groupcounts — [C, GR, P].
Definition datafun.hpp:440
Value GR
Group representatives (sorted unique; NaN trailing).
Definition datafun.hpp:442
Value P
Percentage 100 * count / total per group.
Definition datafun.hpp:443
Value C
Count per group (trailing NaN bucket if g has any NaN).
Definition datafun.hpp:441
Result of the array form of groupsummary — [B, BG, BC].
Definition datafun.hpp:459
Value BC
Element count per group.
Definition datafun.hpp:462
Value B
nGroups x cols(A) per-group, per-column reduction.
Definition datafun.hpp:460
Value BG
Group representatives (sorted unique; NaN trailing).
Definition datafun.hpp:461
Specification for automatic histogram bin estimation.
Definition datafun.hpp:260