qml.kernels.square_kernel_matrix

square_kernel_matrix(X, kernel, assume_normalized_kernel=False)[source]

Computes the square matrix of pairwise kernel values for a given dataset.

Parameters:
  • X (list[datapoint]) – List of datapoints

  • kernel ((datapoint, datapoint) -> float) – Kernel function that maps datapoints to kernel value.

  • assume_normalized_kernel (bool, optional) – Assume that the kernel is normalized, in which case the diagonal of the kernel matrix is set to 1, avoiding unnecessary computations.

Returns:

The square matrix of kernel values.

Return type:

array[float]

Example:

Consider a simple kernel function based on AngleEmbedding:

dev = qml.device('default.qubit', wires=2)
@qml.qnode(dev)
def circuit(x1, x2):
    qml.templates.AngleEmbedding(x1, wires=dev.wires)
    qml.adjoint(qml.templates.AngleEmbedding)(x2, wires=dev.wires)
    return qml.probs(wires=dev.wires)

kernel = lambda x1, x2: circuit(x1, x2)[0]

We can then compute the kernel matrix on a set of 4 (random) feature vectors X via

>>> rng = np.random.default_rng(seed=1234)
>>> X = rng.random((4, 2))
>>> qml.kernels.square_kernel_matrix(X, kernel)
array([[1.        , 0.9957817 , 0.88043387, 0.87011008],
       [0.9957817 , 1.        , 0.90680189, 0.88760331],
       [0.88043387, 0.90680189, 1.        , 0.98850996],
       [0.87011008, 0.88760331, 0.98850996, 1.        ]])