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_matrix
和cupyx.scipy.sparse.dia_matrix
不同。在此类中,offsets[i]
-th 对角线的元素对应于从列顶部读取的输入数据缓冲区的第i
-th 列。将在数据缓冲区上创建一个副本,并且可以通过
data
属性访问。返回的数组需要在形状和数据类型方面与提供的数据缓冲区一致。当此实例参与
Operator
或OperatorAction
的compute
方法时,数据缓冲区将被更新。
示例
>>> 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¶
基本算符的数据缓冲区。