Source code for qlearnkit.encodings.amplitude_encoding
from .encoding_map import EncodingMap
from qiskit import QuantumCircuit, QuantumRegister
import numpy as np
"""Encoding classical data to quantum state via amplitude encoding."""
[docs]class AmplitudeEncoding(EncodingMap):
"""
Amplitude Encoding algorithm
"""
[docs] def circuit(self, x):
n_qubits = self.n_qubits(x)
q = QuantumRegister(n_qubits)
qc = QuantumCircuit(q)
qc.initialize(self.state_vector(x), [q[i] for i in range(n_qubits)])
return qc
[docs] def n_qubits(self, x):
r"""
Retrieves the number of needed qubits
for the amplitude encoding, which is nothing
but :math:`\lceil log_2{x}\rceil`
Args:
x: the vector to be encoded
Returns:
the number of required qubits
"""
nqubits = np.log2(len(x))
return int(nqubits) if nqubits % 1 == 0 else int(nqubits) + 1
[docs] def state_vector(self, x):
r"""
The encoding of a state via amplitude encoding operates
as follows:
given a quantum state :math:`\psi`, it processes the data
such that
.. math::\langle\psi|\psi\rangle = 1,
Args:
x: the classical data
Returns:
(np.array) encoded quantum state
"""
if isinstance(x, list):
x = np.asarray(x)
norm = np.linalg.norm(x)
return x / norm if norm != 0 else x