Permalink
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
80 lines (61 sloc) 3.04 KB
.. currentmodule:: qinfer

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 :func:`~qinfer.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 :func:`~numpy.random.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 :func:`~qinfer.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) # doctest: +SKIP
70.3822376258

Data can also be passed to :func:`~qinfer.simple_est_prec` as a string containing the name of a CSV-formatted data file, or as a Pandas :class:`~pandas.DataFrame`. The latter is especially useful for loading data from formats such as Excel spreadsheets, using :func:`~pandas.read_excel`.

For more information, please see the :ref:`API reference <simple_est>` or the examples below.

Related Examples