Math::Histo::PDL
High-performance PDL (Perl Data Language) integration and zero-copy ingestion for Math::Histo.
Features
- Zero-Copy Ingestion: Ingests double-precision contiguous piddles directly using
$pdl->get_datarefintoMath::Histo/Math::Histo::2D's SIMD-accelerated C core (fill_packed_f64). - Encapsulated Coercion: Handles integer, float, and non-contiguous/transposed slices via safe, clean coercion (
$pdl->double->make_physical). - Full 1D & 2D Support: Supports 1D vectors, pairs of 1D vectors
($x, $y), and 2D coordinate matrices(2, N)/(N, 2). - Weighted Histogramming: Ingests unweighted or weighted samples with proper error propagation.
- Export to PDL: Converts 1D histograms to counts, bin edges, bin centers, and errors; converts 2D histograms to
(nx, ny)matrices and coordinate vectors. - OO & Functional APIs: Automatic method injection onto
Math::HistoandMath::Histo::2D($h->to_pdl,$h->fill_pdl) plus functional builders (hist1d,hist2d).
Installation
perl Makefile.PL
make
make test
make install
Quick Example
use PDL;
use Math::Histo;
use Math::Histo::PDL qw(:all);
# Create and fill 1D histogram from a piddle
my $data = grandom(1_000_000);
my $h = hist1d($data, bins => 100, min => -5, max => 5);
# Export to PDL
my ($counts, $edges, $errors) = $h->to_pdl;
my $centers = $h->centers_pdl;
# 2D Histogram from coordinate matrix
my $coords = grandom(2, 500_000);
my $h2d = hist2d($coords, bins => 50);
my ($matrix, $x_edges, $y_edges) = $h2d->to_pdl;
License
MIT License. Copyright (c) 2026 Steffen Mueller.