qml.BasisEmbedding

BasisEmbedding = <Subroutine: BasisEmbedding>[source]

Encodes \(n\) binary features into a basis state of \(n\) qubits.

For example, for features=np.array([0, 1, 0]) or features=2 (binary 010), the quantum system will be prepared in state \(|010 \rangle\).

Warning

BasisEmbedding calls a circuit whose architecture depends on the binary features. The features argument is therefore not differentiable when using the template, and gradients with respect to the argument cannot be computed by PennyLane.

Parameters:
  • features (tensor_like or int) – Binary input of shape (len(wires), ) or integer that represents the binary input.

  • wires (Any or Iterable[Any]) – the wire(s) that the template acts on

Example

Basis embedding encodes the binary feature vector into a basis state.

dev = qml.device('reference.qubit', wires=3)

@qml.qnode(dev)
def circuit(feature_vector):
    qml.BasisEmbedding(features=feature_vector, wires=range(3))
    return qml.state()

X = [1,1,1]

The resulting circuit is:

>>> print(qml.draw(circuit, level="device")(X))
0: ──X─┤ ╭State
1: ──X─┤ ├State
2: ──X─┤ ╰State

And, the output state is:

>>> print(circuit(X))
    [0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 1.+0.j]

Thus, [1,1,1] is mapped to \(|111 \rangle\).