Skip to content

Commit

Permalink
optimize FidelityQuantumKernel parameterization (#719)
Browse files Browse the repository at this point in the history
* optimize fqk parameterization

* Update qiskit_machine_learning/kernels/fidelity_quantum_kernel.py

Co-authored-by: Anton Dekusar <[email protected]>

* Update qiskit_machine_learning/kernels/fidelity_quantum_kernel.py

* remove vstack

---------

Co-authored-by: Anton Dekusar <[email protected]>
  • Loading branch information
MoritzWillmann and adekusar-drl authored Dec 1, 2023
1 parent f8bf2d8 commit ba89cc4
Showing 1 changed file with 24 additions and 18 deletions.
42 changes: 24 additions & 18 deletions qiskit_machine_learning/kernels/fidelity_quantum_kernel.py
Original file line number Diff line number Diff line change
Expand Up @@ -127,17 +127,20 @@ def _get_parameterization(
left_parameters = np.zeros((0, num_features))
right_parameters = np.zeros((0, num_features))

indices = []
for i, x_i in enumerate(x_vec):
for j, y_j in enumerate(y_vec):
if self._is_trivial(i, j, x_i, y_j, False):
continue
indices = np.asarray(
[
(i, j)
for i, x_i in enumerate(x_vec)
for j, y_j in enumerate(y_vec)
if not self._is_trivial(i, j, x_i, y_j, False)
]
)

left_parameters = np.vstack((left_parameters, x_i))
right_parameters = np.vstack((right_parameters, y_j))
indices.append((i, j))
if indices.size > 0:
left_parameters = x_vec[indices[:, 0]]
right_parameters = y_vec[indices[:, 1]]

return left_parameters, right_parameters, indices
return left_parameters, right_parameters, indices.tolist()

def _get_symmetric_parameterization(
self, x_vec: np.ndarray
Expand All @@ -149,17 +152,20 @@ def _get_symmetric_parameterization(
left_parameters = np.zeros((0, num_features))
right_parameters = np.zeros((0, num_features))

indices = []
for i, x_i in enumerate(x_vec):
for j, x_j in enumerate(x_vec[i:]):
if self._is_trivial(i, i + j, x_i, x_j, True):
continue
indices = np.asarray(
[
(i, i + j)
for i, x_i in enumerate(x_vec)
for j, x_j in enumerate(x_vec[i:])
if not self._is_trivial(i, i + j, x_i, x_j, True)
]
)

left_parameters = np.vstack((left_parameters, x_i))
right_parameters = np.vstack((right_parameters, x_j))
indices.append((i, i + j))
if indices.size > 0:
left_parameters = x_vec[indices[:, 0]]
right_parameters = x_vec[indices[:, 1]]

return left_parameters, right_parameters, indices
return left_parameters, right_parameters, indices.tolist()

def _get_kernel_matrix(
self,
Expand Down

0 comments on commit ba89cc4

Please sign in to comment.