Test and benchmarks of expectation value calculation in QuTiP

Copyright (C) 2011 and later, Paul D. Nation & Robert J. Johansson


In [1]:
from qutip import *

In [2]:
from qutip.cyQ.spmatfuncs import cy_expect

In [3]:
N = 50

In [4]:
op = rand_herm(N)
ket = rand_ket(N)
rho = ket2dm(ket)

ket_data = ket.full()
op_data = op.data

In [5]:
sop = spre(op)
sop_data = sop.data

In [6]:
rho_vec = operator_to_vector(rho)
rho_vec_data = rho_vec.full()

Test for consistent results

Test various ways, from high level to low level, of calculating expectation values in qutip.


In [7]:
expect(op, ket)


Out[7]:
-7.758978511084069

In [8]:
expect(op, rho)


Out[8]:
-7.75897851108407

In [9]:
cy_expect(op_data.data, op_data.indices, op_data.indptr, ket_data, 1)


Out[9]:
-7.758978511084069

In [10]:
expect_psi(op_data, ket_data, 1)


Out[10]:
-7.758978511084069

In [11]:
expect_rho_vec(sop_data, rho_vec_data, 1)


Out[11]:
-7.75897851108407

Benchmarks

wavefunction


In [12]:
%%timeit

expect(op, ket)


1000 loops, best of 3: 688 µs per loop

In [13]:
%%timeit

cy_expect(op_data.data, op_data.indices, op_data.indptr, ket_data, 1)


10000 loops, best of 3: 34 µs per loop

In [14]:
%%timeit

expect_psi(op_data, ket_data, 1)


10000 loops, best of 3: 30.2 µs per loop

density matrix


In [15]:
%%timeit

expect(op, rho)


1000 loops, best of 3: 802 µs per loop

In [16]:
%%timeit

expect_rho_vec(sop_data, rho_vec_data)


1000 loops, best of 3: 640 µs per loop

Software versions


In [17]:
from qutip.ipynbtools import version_table

version_table()


Out[17]:
SoftwareVersion
matplotlib1.4.x
Numpy1.8.0.dev-75cdf3d
Python3.3.1 (default, Apr 17 2013, 22:30:32) [GCC 4.7.3]
IPython1.0.dev
OSposix [linux]
SciPy0.13.0.dev-d74fd00
QuTiP2.3.0.dev-7f0ed30
Cython0.19.1
Thu Jul 04 15:50:58 2013 JST

In [ ]: