rand.random_density_matrix¶
Generates a random density matrix.
Functions¶
|
Generate a random density matrix. |
Module Contents¶
- rand.random_density_matrix.random_density_matrix(dim, is_real=False, k_param=None, distance_metric='haar', seed=None)¶
Generate a random density matrix.
Generates a random
dim
-by-dim
density matrix distributed according to the Hilbert-Schmidt measure. The matrix is of rank <=k_param
distributed according to the distributiondistance_metric
Ifis_real = True
, then all of its entries will be real. The variabledistance_metric
must be one of:haar
(default):Generate a larger pure state according to the Haar measure and trace out the extra dimensions. Sometimes called the Hilbert-Schmidt measure when
k_param = dim
.
bures
:The Bures measure.
Examples
Using
toqito
, we may generate a random complex-valued \(n\)- dimensional density matrix. For \(d=2\), this can be accomplished as follows.>>> from toqito.rand import random_density_matrix >>> complex_dm = random_density_matrix(2) >>> complex_dm array([[0.83378447+0.j , 0.25937396-0.12958422j], [0.25937396+0.12958422j, 0.16621553+0.j ]])
We can verify that this is in fact a valid density matrix using the
is_denisty
function fromtoqito
as follows>>> from toqito.matrix_props import is_density >>> is_density(complex_dm) np.True_
We can also generate random density matrices that are real-valued as follows.
>>> from toqito.rand import random_density_matrix >>> real_dm = random_density_matrix(2, is_real=True) >>> real_dm array([[0.3686455 , 0.48243625], [0.48243625, 0.6313545 ]])
Again, verifying that this is a valid density matrix can be done as follows.
>>> from toqito.matrix_props import is_density >>> is_density(real_dm) np.True_
By default, the random density operators are constructed using the Haar measure. We can select to generate the random density matrix according to the Bures metric instead as follows.
>>> from toqito.rand import random_density_matrix >>> bures_mat = random_density_matrix(2, distance_metric="bures") >>> bures_mat array([[0.73969055+0.j , 0.09494426-0.15279342j], [0.09494426+0.15279342j, 0.26030945+0.j ]])
As before, we can verify that this matrix generated is a valid density matrix.
>>> from toqito.matrix_props import is_density >>> is_density(bures_mat) np.True_
It is also possible to pass a seed to this function for reproducibility.
>>> from toqito.rand import random_density_matrix >>> seeded = random_density_matrix(2, seed=42) >>> seeded array([[0.82448019+0.j , 0.14841568-0.33318114j], [0.14841568+0.33318114j, 0.17551981+0.j ]])
We can once again verify that this is in fact a valid density matrix using the
is_density
function fromtoqito
as follows>>> from toqito.matrix_props import is_density >>> is_density(seeded) np.True_
- Parameters:
dim (int) – The number of rows (and columns) of the density matrix.
is_real (bool) – Boolean denoting whether the returned matrix will have all real entries or not.
k_param (list[int] | int) – Default value is equal to
dim
.distance_metric (str) – The distance metric used to randomly generate the density matrix. This metric is either the Haar measure or the Bures measure. Default value is to use the Haar measure.
seed (int | None) – A seed used to instantiate numpy’s random number generator.
- Returns:
A
dim
-by-dim
random density matrix.- Return type:
numpy.ndarray