Skip to content
@go-scikit

go-scikit

go-scikit

go-scikit

🌐 Website · 📚 Documentation

The scientific stack for Go, in pure Go (CGO=0): N-dimensional arrays, FFTs, numerical methods, statistics, labelled tables, figures and notebooks.

go-scikit is the umbrella over seven organisations. Each is a library, or a few, with its own site, documentation and release cycle; together they cover what a Python notebook reaches for in NumPy, SciPy, pandas and matplotlib. No cgo and no C libraries: one go build gives a static binary, and it cross-compiles like any other Go program. Where a library is slower or less accurate than its Python reference, its documentation says so.

The organisations

Organisation What it is Site Docs
go-ndarray N-dimensional arrays in 13 dtypes with NumPy 2 promotion, broadcasting and strided views; linalg is numpy.linalg, fft is numpy.fft, random is numpy.random with NumPy's numbers for the same seed site docs
go-fft the numpy.fft / scipy.fft equivalent: complex and real transforms of any length, N-D, DCT and DST, single precision, no FFTW site docs
go-numerics numerical methods: optimisation and root finding (optimize), quadrature and ODE solvers (integrate), special functions (special) site docs
go-statistics probability distributions with every method of SciPy's frozen distributions, descriptive statistics and statistical tests (stats) site docs
go-dataframe labelled columnar tables: Series, DataFrame and Index, CSV, Arrow and Parquet, group-by, joins, reshaping, time series site docs
go-plot matplotlib-class figures to SVG and PNG, with matplotlib's object model and defaults and real TeX in the labels site docs
go-notebook Go notebooks: a Markdown file whose go blocks are cells, compiled to a real program, ordered by what each cell uses, re-running only what changed site docs

How the pieces fit

go-notebook      a notebook is a Markdown file; every library below is usable in a cell
─────────────────────────────────────────────────────────────────────────────────────
go-numerics      go-statistics      go-dataframe      go-plot
optimize,        distributions,     labelled tables   figures, SVG and PNG
integrate,       statistics,
special          tests
─────────────────────────────────────────────────────────────────────────────────────
go-ndarray       arrays, numpy.linalg, numpy.random        go-fft   numpy.fft, scipy.fft

go-ndarray is the bottom: the libraries above take and return its arrays, and draw random numbers from its generator. go-ndarray's fft package runs on go-fft. go-statistics takes its special functions and optimisers from go-numerics; go-dataframe's numeric columns are go-ndarray arrays, and its dfplot package draws with go-plot. A go-notebook cell can use any of them, and shows an array, a frame or a figure through its Display method.

What is measured

Each claim below is from the library's own README or documentation, which says how it was measured.

  • Accuracy against mpmath. go-statistics measures every distribution function in ULPs against mpmath, with SciPy measured on the same points: the error is at or below SciPy's in 1473 of 1479 regions, and the six exceptions are under 4.5 ulp (accuracy.md). go-numerics' special functions: about 250 000 points in 419 regions over 62 functions, at or below SciPy's error in 418 regions (accuracy.md).
  • NumPy's numbers for the same seed. go-ndarray's random is numpy.random: SeedSequence, PCG64, MT19937, Philox, SFC64 and 40 samplers, bit-exact against NumPy 2.5.3 on x86-64, with the few ULP-level exceptions listed (random.md). On it, go-statistics' draws of 17 distributions, Dirichlet and multinomial are bit-identical to SciPy's, and its means, variances, 13 quantile methods and histograms are NumPy's bit for bit (rvs-table.md).
  • The reference algorithm's path. go-numerics ports QUADPACK, MINPACK, L-BFGS-B and SciPy's ODE solvers statement by statement: 116 of 124 fixture integrals take SciPy's exact subdivision path and 110 of 120 solve_ivp runs its exact steps (integrate), and 36 of 38 Minimize runs SciPy's exact path (optimize).
  • The Python reference's answers. go-ndarray's linalg is checked against NumPy 2.5.3 on 1,040 cases; go-dataframe against pandas 3.0 on 173 recorded cases; go-plot's tick locations and labels on 408 axes of real figures are matplotlib's, every location bit for bit (design.md).
  • Speed, both ways. At v0.27.0 go-fft is faster than FFTW on all 24 rows on Neoverse-N1 and at or above numpy.fft and scipy.fft on all 24 rows on every host measured (BENCHMARKS.md). go-ndarray against NumPy 2.5.3 and OpenBLAS: faster on reductions and the *Into forms of elementwise operations, slower on MatMul against 16-thread OpenBLAS from 512² (perf.md). go-statistics against SciPy, rows where SciPy is faster included (perf.md). polars is faster than go-dataframe on most of the operations measured (perf.md).

Roadmap

The goal is feature parity with MATLAB (base and toolboxes) and Mathematica, in pure Go (CGO=0), each piece validated against the reference tools of its domain (SciPy/NumPy, mpmath, Octave, PARI/GP, Maxima, SuiteSparse, NIST StRD and others). The plan, the home of each domain and the order of the work are in go-scikit/roadmap. Five packages of the new organisations are released (go-approx/interp v0.2.0; go-approx/poly, go-dsp/signal, go-sparse/sparse and go-bignum/bigfloat v0.1.0).

Wave What Homes
1. Everyday MATLAB core, self-hosted verification correctly rounded big.Float functions and a Go oracle harness; sparse matrices and iterative solvers; interpolation and splines; filter design and spectral estimation go-bignum, go-sparse, go-approx, go-dsp
2. Models and geometry constrained and global optimisation; linear models and GLM; exact predicates, Delaunay, Voronoi; automatic differentiation; units; scientific file formats; dense linear algebra additions go-numerics/optimize, go-statistics/models, go-geometry, go-autodiff, go-units, go-sciio, go-ndarray/linalg
3. Systems, PDEs, 3D, interactivity 3D plots and Manipulate; control systems; meshing and finite elements; sparse direct solvers, wavelets, Chebyshev/AAA; machine learning and time series; graph algorithms and layouts go-plot, go-notebook, go-control, go-geometry, go-fem, go-sparse, go-dsp, go-approx, go-mlkit, go-statistics/timeseries, go-graphalgo, go-graphdrawing
4. Mathematica's core ball arithmetic, N-digit special functions and number theory; computer algebra go-bignum, go-symbolic

The thirteen new organisations, created on 2026-10-17:

  • go-bignum (site, docs), bigfloat released v0.1.0: arbitrary precision, number theory, the Go oracle harness.
  • go-sparse (site, docs), sparse v0.1.0 released: sparse matrices, orderings, iterative and direct solvers, sparse eigensolvers.
  • go-approx (site, docs), interp and poly v0.1.0 released: interpolation, splines, polynomials, Chebyshev and AAA approximation, scattered data.
  • go-dsp (site, docs), signal v0.1.0 released: filter design and filtering, spectral estimation, resampling, wavelets, audio I/O.
  • go-symbolic, planned: computer algebra.
  • go-mlkit, planned: machine learning, clustering, classification, model selection.
  • go-autodiff, planned: automatic differentiation.
  • go-geometry, planned: robust predicates, convex hull, Delaunay, Voronoi, k-d trees, mesh generation.
  • go-fem, planned: finite elements and PDE solvers.
  • go-graphalgo, planned: graph algorithms.
  • go-control, planned: control systems and DAE solvers.
  • go-units, planned: units and physical constants.
  • go-sciio, planned: scientific file formats (HDF5, MAT, NetCDF, FITS, npy, Matrix Market, WAV/FLAC).

Read PLAN.md for the rules and the homes, STATUS.md for the state of each item, and bib/ for the bibliography each item starts from.

Repositories here

Repo What it is
go-scikit.github.io the portal (Hugo): the stack, one card per organisation, a first notebook
docs the documentation site (Hugo + Hextra), served at /docs/
brand logo, icons and social images; the mark is the stack, written by a Go program
roadmap the parity plan with MATLAB and Mathematica: homes, waves, status and bibliography
.github this profile and the shared Renovate preset

The libraries themselves live in their organisations above. Everything is BSD-3-Clause.

Popular repositories Loading

  1. .github .github Public

    Organisation profile and shared Renovate preset for go-scikit

    JavaScript

  2. brand brand Public

    Logo, icons and social images of go-scikit

    Go

  3. go-scikit.github.io go-scikit.github.io Public

    The go-scikit portal: the pure-Go scientific stack, one page

    HTML

  4. ruby ruby Public

    Ruby bindings to the go-scikit stack, for the pure-Go Ruby

    Go

  5. roadmap roadmap Public

    Feature parity of the go-scikit stack with MATLAB and Mathematica: inventory, bibliography, plan, status

    Go

  6. docs docs Public

    Documentation site for the go-scikit scientific stack for Go

    HTML

Repositories

Showing 6 of 6 repositories

People

This organization has no public members. You must be a member to see who’s a part of this organization.

Top languages

Loading…

Most used topics

Loading…