discretize — Group numeric data into bins.
discretize(X,edges) returns one-based bin numbers for values in X using numeric bin edges. Integer X, edges, and replacement values support all eight integer classes.
Syntax
Y = discretize(X, edges)
Y = discretize(X, N)
Y = discretize(___, values)
Y = discretize(___, "IncludedEdge", side)
[Y, E] = discretize(X, N, ___)Inputs
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
X | NumericArray | Yes | — | Numeric input values to assign to bins. |
edges | NumericArray | Yes | — | Monotonically increasing numeric bin edges. |
N | NumericScalar | Yes | — | Positive integer number of equal-width bins. |
edges_or_N | Any | Yes | — | Explicit numeric edges or a positive scalar bin count. |
values | Any | Yes | — | One replacement value for each bin. |
IncludedEdge | StringScalar | Yes | — | Literal option name "IncludedEdge". |
side | StringScalar | Yes | — | Either "left" or "right". |
arguments | Any | Variadic | — | Optional replacement values and IncludedEdge name-value pair. |
Returns
| Name | Type | Description |
|---|---|---|
Y | Any | Bin numbers or replacement values with the shape of X. |
E | NumericArray | Computed bin-edge row vector. |
Returned values from discretize depend on how many outputs the caller requests.
Errors
| Identifier | When | Message |
|---|---|---|
RunMat:grouping:InvalidInput | Inputs are malformed, have incompatible lengths, or request unsupported grouped output. | grouping builtin: invalid input |
RunMat:grouping:TooLarge | The requested dense or combinatorial output exceeds RunMat's materialization limit. | grouping builtin: output is too large |
How discretize works
- Explicit integer X and edges are compared from authoritative typed storage, including values beyond flintmax; edges must be monotonically increasing and consecutive repeated edges are accepted.
discretize(X,N)creates N equal-width double edges, and[Y,E] = discretize(X,N,___)returns those computed edges as the second output. Explicit-edge calls return only Y. The current implementation materializes X in the floating computation domain for the scalar-bin-count form.- Only NaN values in X are intrinsically missing. Positive and negative infinity are binned normally when the corresponding outer edge is infinite.
- Numeric replacement values preserve their class. Out-of-range and NaN inputs become NaN for floating replacement values and zero for integer replacement values.
- String replacement values and the
IncludedEdgename-value option are supported; the default is left-inclusive/right-exclusive with the final edge included. - Categorical replacement output is not yet implemented.
Example
Bin values
Y = discretize([0.2 1.5],[0 1 2])Expected output:
Y = [1 2]Using discretize with coding agents
Open a RunMat example with live inputs, then ask the agent to explain how discretize changes the result.
Run a small discretize example, explain the result, then change one input and compare the output.
Related Array functions
Grouping
accumarray · combinations · findgroups · groupcounts · grp2idx · splitapply
Sorting Sets
argsort · intersect · ismember · ismembertol · issorted · issortedrows · setdiff · setxor · sort · sortrows · union · unique
Shape
blkdiag · cat · circshift · diag · flip · fliplr · flipud · horzcat · ipermute · kron · permute · repelem · repmat · reshape · rot90 · squeeze · toeplitz · tril · triu · vertcat
Open-source implementation
Unlike proprietary runtimes, every RunMat function is open-source. Read exactly how discretize is executed, line by line, in Rust.
- View the source for discretize in Rust on GitHub
- Learn how the RunMat runtime works
- Found a bug? Open an issue with a minimal reproduction.
About RunMat
RunMat is an open-source runtime that executes MATLAB-syntax code blazing on any GPU. It is licensed under the Apache 2.0 license.
- RunMat automatically optimizes your math for GPU execution on Apple, Nvidia, and AMD hardware. No code changes needed. Simulations that took hours now take minutes.
- Start running code in seconds. RunMat runs in the browser, on the desktop, or from the CLI. No license server, no IT ticket.