How Classical Neural Networks Read Data
One of the simplest and most widely used approaches for quantum data embedding is angle encoding (also called rotation-based embedding).
In this method, classical features are encoded as rotation angles applied to qubits using quantum gates such as R-X, R-Y and R-Z which rotate a qubit along the X, Y, and Z axes respectively.
For example, a classical vector: X = [x₁, x₂, x₃] can be embedded into a quantum circuit by rotating different qubits according to the value of each feature.
Let’s look at a simple implementation of rotation-based encoding in PennyLane:
import pennylane as qml
import numpy as np
# Classical input vector
x = np.array([0.2, 0.7, 1.1])
n_qubits = len(x)
dev = qml.device("default.qubit", wires=n_qubits)
@qml.qnode(dev)
def rotational_embedding_circuit(x):
# Each feature x_i rotates one qubit
qml.AngleEmbedding(
features=x,
wires=range(n_qubits),
rotation="Y" # can also be "X" or "Z"
)
return qml.state()
state = rotational_embedding_circuit(x)
qml.draw_mpl(rotational_embedding_circuit, style='pennylane_sketch')(x)
print(state)

One of the main disadvantages of rotation-based encoding is its poor scalability with respect to the number of qubits. In general, we need as many qubits as there are features in the input vector.
Amplitude-based Encoding
Amplitude-based encoding is another technique for embedding classical data into quantum systems. Unlike rotation-based encoding, where each feature controls the rotation of a qubit, amplitude encoding stores information directly in the amplitudes of a quantum state, for example, the α and β terms in |ψ⟩ = α |0⟩ + β |1⟩.
For example:
X = [x₁, x₂, x₃, x₄] can be encoded using log₂(|X|) = 2
qubits as:
∣ψ(x)⟩= x₁∣00⟩ + x₂∣01⟩ + x₃∣10⟩ + x₄∣11⟩.
This is significantly more compact compared to the rotation-based encoding we saw earlier.
In fact, this is one of the most fascinating ideas in quantum computing because the number of amplitudes grows exponentially with the number of qubits.
For example:
- 2 qubits → 2² = 4 amplitudes
- 10 qubits → 2¹⁰ = 1024 amplitudes
- 20 qubits → over one million amplitudes
This means that an n-qubit system is described by 2ⁿ amplitudes, leading to an exponentially growing state space.
As a result, amplitude encoding is exponentially more space-efficient than rotation-based encoding. Instead of requiring one qubit per feature, it only requires approximately: log₂(n) qubits for n features.
Let’s now look at a simple implementation of amplitude encoding in PennyLane:
import pennylane as qml
import numpy as np
# Classical input vector
x = np.array([0.2, 0.4, 0.6, 0.8])
# Amplitude encoding needs a normalized vector
x = x / np.linalg.norm(x)
# Number of qubits needed:
# 2 qubits can represent 2^2 = 4 amplitudes
n_qubits = int(np.log2(len(x)))
dev = qml.device("default.qubit", wires=n_qubits)
@qml.qnode(dev)
def amplitude_encoding_circuit(x):
qml.AmplitudeEmbedding(
features=x,
wires=range(n_qubits),
normalize=True
)
return qml.state()
state = amplitude_encoding_circuit(x)
qml.draw_mpl(amplitude_encoding_circuit, style='pennylane_sketch')(x)
print(state)

If you are as suspicious as I am, you might already be thinking:
“This looks too good to be true.”
And you would be right. While amplitude encoding allows us to represent exponentially more data compared to angle encoding, actually preparing such quantum states generally requires an exponentially large number of operations.
The representation is exponentially compact.
The loading process usually is not.
The following table compares the two encoding approaches:

The Data Loading Bottleneck in Quantum Machine Learning
Modern Machine Learning systems work with extremely large and high-dimensional data. Images may contain millions of pixels, audio signals can span thousands of timesteps, and modern language models operate on massive embedding vectors.
We looked at two fundamental approaches for embedding classical data into quantum systems. While amplitude encoding appears theoretically attractive because of its exponential compactness, the process of actually preparing such quantum states becomes increasingly difficult as the size of the data grows.
This creates one of the biggest practical bottlenecks in Quantum Machine Learning:
Loading classical information into a quantum system can itself become computationally expensive.
In many cases, the cost of state preparation may partially or completely offset the theoretical advantages promised by quantum algorithms.
This is an important subtlety that is often overlooked in discussions around Quantum Machine Learning. Many research papers give very little attention to the fact that:
A quantum model may process information in an exponentially large Hilbert space, but before any computation can happen, the data must first be embedded into that space efficiently.
And that turns out to be an extremely difficult problem.
For arbitrary classical data, no universally efficient quantum state preparation method is currently known. In fact, preparing a completely general quantum state often requires an exponentially large number of quantum operations.
This creates a fascinating tradeoff:
- Rotation-based encoding is relatively easy to implement but scales poorly with qubit count.
- Amplitude encoding is exponentially compact but can be exponentially expensive to prepare.
In other words:
The representation problem and the loading problem are not the same thing.
A quantum computer may be capable of representing exponentially large amounts of information, but efficiently loading that information into the quantum system is a fundamentally different challenge altogether.
Furthermore, during the embedding process, important structural relationships present in the original data — such as spatial relationships in images or temporal dependencies in sequential data — may also become difficult to preserve naturally inside quantum representations.
Conclusion
Quantum Machine Learning promises access to exponentially large representational spaces, but before any computation can happen, classical information must first be embedded into quantum systems efficiently.
As we explored in this article, this turns out to be far more difficult than it initially appears. While methods such as amplitude encoding offer extremely compact representations, the process of preparing arbitrary quantum states itself can become computationally expensive.
This has made quantum data loading one of the central practical bottlenecks in modern QML research. Many discussions around Quantum Machine Learning focus heavily on the power of exponentially large Hilbert spaces while giving far less attention to the cost of actually reaching those states — almost like saying:
“We can make tea at the top of the mountain, but how we get there is another problem.”
Researchers are now actively exploring newer approaches such as learned quantum embeddings, data re-uploading techniques, and structure-preserving embeddings to overcome some of these limitations. Even large companies such as Google Quantum AI have recently explored more efficient embedding and representation strategies for quantum machine learning systems.
We may explore some of these approaches in future articles.
Thank you for reading!
Disclaimer:
This article was grammatically refined with the assistance of Large Language Models (LLMs). All illustrations in this article were created by the author using GPT and Gemini image-generation tools, while quantum circuit diagrams were generated using PennyLane.
Version 1.1