Source code for iq_readout.metrics
"""Readout metrics.
"""
import numpy as np
[docs]
def get_probs_prep_meas(
classifier,
shots_0: np.ndarray,
shots_1: np.ndarray,
shots_2: np.ndarray = None,
) -> np.ndarray:
"""
Returns matrix whose element i,j corresponds to:
p(measure state j | prepared state i)
Parameters
----------
classifier
A classifier from the iq_readout package
shots_0: np.ndarray(N, 2)
Data when preparaing state 0
shots_1: np.ndarray(N, 2)
Data when preparaing state 1
shots_2: np.ndarray(N, 2)
Data when preparaing state 2
Returns
-------
probs: np.ndarray(2,2) or np.ndarray(3,3)
The size of the array depends on the number of states that
the classifier can discriminate.
"""
if set(["pdf_0", "pdf_1"]) > set(dir(classifier)):
raise ValueError(
"'classifier' must have the following methods: "
f"'pdf_0', 'pdf_1'; but it has {dir(classifier)}"
)
if "pdf_2" in dir(classifier) and (shots_2 is None):
raise ValueError("For 3-state classifiers, one must specify 'shots_2'")
states = [0, 1]
shots = [shots_0, shots_1]
probs = np.zeros((2, 2))
if "pdf_2" in dir(classifier):
states = [0, 1, 2]
shots = [shots_0, shots_1, shots_2]
probs = np.zeros((3, 3))
for i, (state, shot) in enumerate(zip(states, shots)):
prediction = classifier.predict(shot)
for j, _ in enumerate(states):
probs[i, j] = np.average(prediction == j)
return probs