sf.utils.samples_variance

samples_variance(samples, modes=None)[source]

Uses samples obtained by a measurement operator to return the expectation value of the operator.

In case samples were obtained for multiple modes, it is assumed that the same measurement operator was used for each mode.

Using PNR samples to obtain variance of the number operator

If applied to a single mode, this simply corresponds to mean photon number \(Var[ n_i ]\).

For multiple modes, the expectation value of the tensor product of number operator, \(Var[ n_{i_0} \otimes n_{i_1} \otimes \cdots \otimes n_{i_m} ]\) is returned.

Example:

>>> samples = np.array([[2, 0], [2, 2], [2, 0], [0, 0]])
>>> samples_variance(samples)
3.0

Using homodyne samples to obtain variance of the quadrature operator

Assuming that samples were obtained after measuring either the hat{x} or hat{p} operator.

If applied to a single mode, this simply corresponds to the expectation value of the given quadrature operator. For example for samples obtained by measuring in the position basis, for a single mode we have \(Var[ \hat{x}_i]\)

For multiple modes, the variance of the tensor product of the momentum operator is obtained: \(Var[\hat{x}_{i_0} \otimes \hat{x}_{i_1} \otimes \cdots \otimes \hat{x}_{i_m}]\).

Example:

>>> samples = np.array([[1.23, 0], [12.32, 0.32], [0.3222, 6.34], [0, 3.543]])
>>> samples_variance(samples)
2.6899595015070004
Parameters
  • homodyne_samples (ndarray) – the homodyne samples with a shape of (shots, modes)

  • modes (Sequence) – indices of modes to get the variance for

Returns

the variance from the samples

Return type

float