Quantum K-means
Distance calculation
- normalize(v)[source]
Normalize real vector.
- Parameters:
v (
numpy.ndarray) – real vector- Returns:
normalized vector
- Return type:
numpy.ndarray
- calc_z(a, b) float[source]
Calculates magnitude as :math: {z = |a|^2 + |b|^2}.
- Parameters:
a (float) – first classic input
b (float) – second classic input
- Returns:
magnitude
- Return type:
float
- psi_amp(a, b)[source]
Prepares amplitudes for encoding state \({\psi}\).
- Parameters:
a (float) – first classic input
b (float) – second classic input
- Returns:
list of amplitudes (floats)
- Return type:
List
- phi_amp(a, b)[source]
Prepares amplitudes for encoding state \({\phi}\).
- Parameters:
a (float) – first classic input
b (float) – second classic input
- Returns:
list of amplitudes (floats)
- Return type:
List
- psi_circuit(a, b) QuantumCircuit[source]
Subcircuit for state \({\psi}\).
- Parameters:
a (float) – first classic input
b (float) – second classic input
- Returns:
Quantum circuit for state \({\psi}\)
- Return type:
qiskit.circuit.QuantumCircuit
- phi_circuit(a, b) QuantumCircuit[source]
Subcircuit for state \({\phi}\).
- Parameters:
a (float) – first classic input
b (float) – second classic input
- Returns:
Quantum circuit for state \({\phi}\)
- Return type:
qiskit.circuit.QuantumCircuit
- overlap_circuit(a, b) QuantumCircuit[source]
Full overlap circuit <\({\phi} | {\psi}\)>.
- Parameters:
a (float) – first classic input
b (float) – second classic input
- Returns:
Quantum circuit that calculates overlap of encoded quantum states.
- Return type:
qiskit.circuit.QuantumCircuit
- run_circuit(qc)[source]
Utility function that runs quantum circuit
- Parameters:
qc (
qiskit.circuit.QuantumCircuit) – the quantum circuit- Returns:
counts of measurements
- Return type:
List
- calc_overlap(answer, state='0')[source]
Utility function that calculates overlap from measurement results.
- Parameters:
answer (List) – counts of measurements.
state (string, optional) – state that captures distance, by default 0
- Returns:
the overlap
- Return type:
float
- calc_dist(answer, z, state='0')[source]
Utility function that calculates the distance from overlap proportional to \({|a-b|^2}\).
- Parameters:
answer (List) – counts of measurements
z (float) – magnitude
state (string, optional) – state that captures distance, by default 0
- Returns:
the distance
- Return type:
float
Circuit Optimization
- diffuser(n)[source]
Subcircuit for Diffuser of Grover algorithm.
- Parameters:
n (int) – number of qubits
- Returns:
circuit for Grover diffuser
- Return type:
qiskit.circuit.QuantumCircuit
- grover_circuit(n, oracle, marked_n=1)[source]
Full Grover quantum circuit.
- Parameters:
n (int) – number of qubits
oracle (
qiskit.circuit.QuantumCircuit) – the preconstructed oracle circuitmarked_n (int, optional) – number of marked entries, default 1
- Returns:
Grover circuit.
- Return type:
qiskit.circuit.QuantumCircuit
- create_threshold_oracle_operator(nn, idcs_to_mark)[source]
Threshold oracle operator for Grover circuit.
- Parameters:
nn (int) – number of qubits
idcs_to_mark (int) – number of elements to mark
- Returns:
Threshold oracle.
- Return type:
qiskit.quantum_info.operators.Operator
- get_indices_to_mark(dist_arr, threshold)[source]
Utility function that finds indices to be marked.
- Parameters:
dist_arr (
numpy.ndarray) – array of distances.threshold (float) – current threshold
- Returns:
the marked indices
- Return type:
numpy.ndarray
- create_threshold_oracle_set(dist_arr)[source]
Create set of threshold oracles for linear combination.
- Parameters:
dist_arr (
numpy.ndarray) – array of distances.- Returns:
List of threshold oracle Operators
- Return type:
List
- create_oracle_lincombi(threshold, dist_arr, oracles)[source]
Create linear combination of threshold oracles for Grover circuit.
- Parameters:
threshold (float) – current threshold value
dist_arr (
numpy.ndarray) – array of distances.oracles (List) – list of oracle Operators
- Returns:
The linear combination threshold oracle circuit.
- Return type:
qiskit.circuit.QuantumCircuit