cuquantum.densitymat.MultidiagonalOperator

class cuquantum.densitymat.MultidiagonalOperator(data, offsets, callback=None)[源代码]

来自数据缓冲区、偏移量和可选回调函数的多对角单模算符。

参数
  • data – 对角线元素的数据缓冲区,形状为 (mode_dimension, num_diagonals)

  • offsets – 长度为 num_diagonals 的对角线偏移量。

  • callback – 签名 (t, args) -> np.ndarray 的 CPU 回调函数。

注意

  • 数据布局与 scipy.sparse.dia_matrixcupyx.scipy.sparse.dia_matrix 不同。在此类中,offsets[i]-th 对角线的元素对应于从列顶部读取的输入数据缓冲区的第 i-th 列。

  • 将在数据缓冲区上创建一个副本,并且可以通过 data 属性访问。

  • 返回的数组需要在形状和数据类型方面与提供的数据缓冲区一致。当此实例参与 OperatorOperatorActioncompute 方法时,数据缓冲区将被更新。

示例

>>> import numpy as np
>>> from cuquantum.densitymat import MultidiagonalOperator

假设我们想在维度为 3 的希尔伯特空间上构造一个创建算符作为 MultidiagonalOperator。它可以从数据缓冲区和对角线偏移量构造为

>>> data = np.array([[1], [np.sqrt(2)], [0]]) # the last element doesn't matter
>>> offsets = [-1]
>>> dia_op = MultidiagonalOperator(data, offsets)

如果我们已经有了 scipy.sparse.dia_matrix 格式的基本算符,例如,

>>> dia_matrix = scipy.sparse.dia_matrix(...) # put your data here

我们可以使用以下方法创建一个 MultidiagonalOperator

>>> offsets = list(dia_matrix.offsets)
>>> data = np.zeros((dia_matrix.shape[0], len(offsets)), dtype=dia_matrix.dtype)
>>> for i, offset in enumerate(offsets):
>>>    end = None if offset == 0 else -abs(offset)
>>>    data[:end, i] = dia_matrix.diagonal(offset)
>>> dia_op = MultidiagonalOperator(data, offsets)

方法

__add__(other: Union[DenseOperator, MultidiagonalOperator]) Union[DenseOperator, MultidiagonalOperator][源代码]

将一个基本算符添加到此实例,并返回与 other 类型相同的新基本算符。

__init__(data: Union[numpy.ndarray, cupy.ndarray], offsets: Sequence[int], callback: Optional[Callable[[float, Sequence], numpy.ndarray]] = None) None[源代码]

从数据缓冲区、偏移量和可选回调函数初始化多对角单模算符。

__matmul__(other: Union[DenseOperator, MultidiagonalOperator]) Union[DenseOperator, MultidiagonalOperator][源代码]

在此实例和另一个基本算符之间执行矩阵乘法,并返回与 other 类型相同的新基本算符。

__mul__(scalar: numbers.Number) MultidiagonalOperator[源代码]

将此实例与左侧的标量相乘。

__rmul__(scalar: numbers.Number) MultidiagonalOperator[源代码]

将此实例与右侧的标量相乘。

__sub__(other: Union[DenseOperator, MultidiagonalOperator]) Union[DenseOperator, MultidiagonalOperator][源代码]

从此实例中减去一个基本算符,并返回与 other 类型相同的新基本算符。

copy() MultidiagonalOperator[source]

返回多对角基本算符的副本。

dag() MultidiagonalOperator[source]

返回此实例的共轭复转置。

to_array(t: Optional[float] = None, args: Optional[Sequence] = None, device: str = 'cpu') Union[numpy.ndarray, cupy.ndarray][source]

返回多对角基本算符的数组形式。

参数
  • t – 回调中的时间变量,仅当回调不是 None 时才需要。

  • args – 回调中的附加参数,仅当回调不是 None 时才需要。

  • device – 返回数组的设备。默认为 “cpu”

Returns

指定设备上多对角基本算符的数组形式。

注意

此函数返回多对角基本算符的密集数组形式。如果需要包含对角元素的原始数据缓冲区,请使用 data 属性。

to_dense() DenseOperator[source]

返回多对角基本算符的 DenseOperator 形式。

Attributes

data

基本算符的数据缓冲区。