squlearn.encoding_circuit.HighDimEncodingCircuit

class squlearn.encoding_circuit.HighDimEncodingCircuit(num_qubits: int, num_features: int = None, cycling: bool = True, cycling_type: str = 'saw', num_layers: None | int = None, layer_type: str = 'rows', entangling_gate: str = 'iswap')

The high-dimensional encoding circuit from reference [1].

A encoding circuit that can be used for the classification of high-dimensional data.

Example for 5 qubits, a 23 dimensional feature vector and 2 layers:

(Source code, png, hires.png, pdf)

../../_images/squlearn-encoding_circuit-HighDimEncodingCircuit-1.png

The indexing of the feature vector can be changed by the arguments cycling, cycling_type and layer_type.

Parameters:
  • num_qubits (int) – Number of qubits of the HighDim encoding circuit

  • num_features (int) – Dimension of the feature vector

  • cycling (bool) – If true, the assignment of gates cycles, i.e. if reaching the last feature, the layer is filled by starting again from the first feature. If false, the gates are left out after reaching the last feature. (default: true)

  • cycling_type (str) – Defines, how the indices are cycled.n saw: restarts by 0, e.g. 0,1,2,3,0,1,2,3 (recommended); hat: goes up and then down, e.g. 0,1,2,3,2,1,0,1,2,3

  • number_of_layers (int) – Sets the number of layer repetitions. If not given, the number of layers is determined automatically by the number of features and qubits. If the given number of layers is to low, a error is thrown.

  • layer_type (str) – Defines in which directions the features are assigned to the gates. columns: iteration in columns (as shown in the example above); rows: iteration in rows.

  • entangling_gate (str) – Entangling gates that are used in the entangling layer. Either iswap or cx (default: iswap)

References

[1]: Peters, Evan, et al. “Machine learning of high dimensional data on a noisy quantum processor.” npj Quantum Information 7.1 (2021): 161.

compose(x, concatenate_features=False, concatenate_parameters=False, num_circuit_features: Tuple[int, int] = (None, None))

Composition of encoding circuits with options for handling features and parameters

Number of qubits and features have to be equal in both encoding circuits! The special function and properties of the both encoding circuits are lost by this composition.

Parameters:
  • self (EncodingCircuitBase) – right / first encoding circuit

  • x (EncodingCircuitBase) – left / second encoding circuit

  • concatenate_features (bool) – If True, the features of both encoding circuits are concatenated (default: False). If False, the features of both encoding circuits are taken

  • concatenate_parameters (bool) – If True, the parameters of both encoding circuits are concatenated (default: False). If False, the parameters of both encoding circuits are taken

  • num_circuit_features (Tuple[int, int]) – Tuple of the number of features for both encoding circuits. This has to be provided if concatenate_features is True otherwise an error is raised.

Returns:

Returns the composed encoding circuit as special class ComposedEncodingCircuit

draw(output: str = None, num_features: int = None, feature_label: str = 'x', parameter_label: str = 'p', decompose: bool = False, **kwargs) None

Draws the encoding circuit using the QuantumCircuit.draw() function.

Parameters:
  • output (str) – Output format of the drawing (default: None).

  • num_features (int) – Number of features to draw the circuit with (default: None).

  • feature_label (str) – Label for the feature vector (default:”x”).

  • parameter_label (str) – Label for the parameter vector (default:”p”).

  • decompose (bool) – If True, the circuit is decomposed before printing (default: False).

  • kwargs – Additional arguments from Qiskit’s QuantumCircuit.draw() function.

Raises:

ValueError – Raised if the number of features is not provided.

Returns:

Returns the circuit in qiskit QuantumCircuit.draw() format

generate_initial_parameters(num_features: int, seed: int | None = None) ndarray

Generates random parameters for the encoding circuit

Parameters:
  • num_features (int) – Number of features of the input data

  • seed (Union[int,None]) – Seed for the random number generator (default: None)

Returns:

The randomly generated parameters

get_circuit(features: ParameterVector | ndarray, parameters: ParameterVector | ndarray = None) QuantumCircuit

Returns the circuit of the HighDim encoding circuit

Parameters:
  • features (Union[ParameterVector,np.ndarray]) – Input vector of the features from which the gate inputs are obtained.

  • param_vec (Union[ParameterVector,np.ndarray]) – Input vector of the parameters from which the gate inputs are obtained.

Returns:

The circuit of the high-dimensional encoding circuit

get_feature_bounds(num_features: int) ndarray

Returns the feature bounds expanded for a given number of features.

Parameters:

num_features (int) – Number of features to expand the bounds for.

Returns:

Feature bounds expanded for the number of features.

Return type:

np.ndarray

get_params(deep: bool = True) dict

Returns hyper-parameters and their values of the HighDim encoding circuit

Parameters:

deep (bool) – If True, also the parameters for contained objects are returned (default=True).

Returns:

Dictionary with hyper-parameters and values.

inverse()

Returns the inverse of the encoding circuit.

Returns:

The inverse of the encoding circuit

set_params(**params) EncodingCircuitBase

Sets value of the encoding circuit hyper-parameters.

Parameters:

params – Hyper-parameters and their values, e.g. num_qubits=2.