Simple Estimation Functions¶
QInfer provides several functions to help you get up and running quickly with common estimation tasks, without having to worry about explicitly specifying models and distributions. Later, we’ll see how to build up custom estimation problems in a straightforward and structured manner. For now, though, let’s start by diving into how to use QInfer to learn a single precession frequency.
In particular, suppose that you have a qubit that starts in
the \(\ket{+} = (\ket{0} + \ket{1}) / \sqrt{2}\) state, then
evolves under \(U(t) = \exp(-\ii \omega \sigma_z)\) for an
unknown frequency \(\omega\). Then measuring the qubit in the
\(\sigma_x\) basis results in observing a \(1\) with
probability \(\sin^2(\omega t / 2)\). We can estimate
the precession frequency
\(\omega\) with QInfer using the simple_est_prec()
function.
As an example, let’s consider an experiment for learning \(\omega\)
that consists of taking 40 measurements at each time
\(t_k = k / (2 \omega_{\max})\), where \(k = 0, \dots, N - 1\)
indexes each measurement, \(\omega_{\max}\) is the maximum plausible
frequency to be estimated, and where \(N\) is the number of
distinct times measured. We can generate this data using
binomial()
:
>>> omega_max = 100
>>> true_omega = 70.3
>>> ts = np.arange(1, 51) / (2 * omega_max)
>>> counts = np.random.binomial(40, p=np.sin(true_omega * ts / 2) ** 2)
We pass this data to QInfer as an array with three columns (that is,
shape (50, 3)
for this example), corresponding respectively to
the observed counts, the time at which the counts were observed, and
the number of measurements taken at that time.
>>> data = np.column_stack([counts, ts, np.ones_like(counts) * 40])
Finally, we’re ready to call simple_est_prec()
:
>>> from qinfer import simple_est_prec
>>> mean, cov = simple_est_prec(data, freq_max=omega_max)
The returned mean
and cov
tell us the mean and covariance,
respectively, resulting from the frequency estimation problem.
>>> print(mean)
70.3822376258
Data can also be passed to simple_est_prec()
as
a string containing the name of a CSV-formatted data file, or
as a Pandas DataFrame
. The latter is especially
useful for loading data from formats such as Excel spreadsheets,
using read_excel()
.
For more information, please see the API reference or the examples below.