Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Kernels

Chi-Squared Kernel

chi2_kernel
all-pairspairedcondensedsinglekernelVectors
\[ k(x,y)=\exp\!\left[-\gamma\sum_i\frac{(x_i-y_i)^2}{x_i+y_i}\right] \]

Nonnegative coordinates; joint zeros contribute zero. gamma defaults to 1.

Shapes and Modes

InputLayout
One sample[D]
Collection X[...,N,D]
Collection Y[...,M,D]
ModeSelectorOutput
all-pairscompare(X,Y,metric=...)[...,N,M]
pairedcompare(X,Y,metric=...,mode="paired")[...,N]; equal sample counts
condensedcompare(X,metric=...,mode="condensed")[...,N*(N-1)//2]; strict upper triangle
singlecompare(x,y,metric=...,mode="single")[...]; leading batches only

Leading batch dimensions broadcast. See mode and shape conventions.

Entry Points

Named Python entryFunction
All-pairschi2_kernel

The Python and C++ compare selectors cover every mode shown above. pairwise_kernels, paired_kernels and condensed_kernels also select it. single_comparison is shorthand for single mode.

Catalog aliases: chi2.

Accepted metric options: gamma. Omitted options keep the metric defaults; unused options are rejected.

Example

Choose Python or C++ in the top bar; the setting applies across this guide.

Python
import torch
import torchpairwise as tp

X = torch.rand(2, 2) + 0.2  # [N=2,D=2]
Y = torch.rand(3, 2) + 0.2  # [M=3,D=2]

metric = "chi2_kernel"
all_pairs = tp.compare(X, Y, metric=metric)  # [2,3]
paired_Y = Y[:2]
paired = tp.compare(X, paired_Y, metric=metric, mode="paired")  # [2]
condensed = tp.compare(X, metric=metric, mode="condensed")      # [1]
x, y = X[0], Y[0]
single = tp.compare(x, y, metric=metric, mode="single")  # scalar
C++ / LibTorch
#include <torchpairwise.h>

namespace tp = torchpairwise::ops;
auto X = at::rand({2, 2}) + 0.2;  // [N=2,D=2]
auto Y = at::rand({3, 2}) + 0.2;  // [M=3,D=2]

const std::string metric = "chi2_kernel";
tp::ComparisonOptions options;
auto all_pairs = tp::compare(X, Y, metric, "all_pairs", options);  // [2,3]
auto paired_Y = Y.narrow(0, 0, 2);
auto paired = tp::compare(X, paired_Y, metric, "paired", options);  // [2]
// [1]
auto condensed = tp::compare(X, c10::nullopt, metric, "condensed", options);
auto x = X[0], y = Y[0];
auto single = tp::compare(x, y, metric, "single", options);  // scalar

Streamed Evaluation

tp.lazy(x, y, name) binds this kernel, with its feature-space geometry methods, for reductions, selection and products without retaining its full generated comparison matrix. Native source factories depend on the sample family; see streamed operators and C++ use.

Numerical Contract

Floating CPU/CUDA inputs use matching float32 / float64, with lower precision promoted under autocast where supported. First derivatives follow the metric’s smooth and boundary conventions. See the detailed conventions and precision and deployment.

Related APIs can differ in reduction, normalization, units or boundary behavior; match these before comparing values.