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 circuit

  • marked_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