paddle_quantum.linalg

量桨中的线性代数的功能实现。

abs_norm(mat)

计算矩阵范数

参数:

mat (Union[np.ndarray, paddle.Tensor, State]) – 矩阵

返回:

范数

返回类型:

float

dagger(mat)

计算矩阵的转置共轭

参数:

mat (Union[np.ndarray, paddle.Tensor]) – 矩阵

返回:

矩阵的转置共轭

返回类型:

Union[np.ndarray, paddle.Tensor]

is_hermitian(mat, eps=1e-6)

验证矩阵 P 是否为厄密矩阵

参数:
  • mat (Union[np.ndarray, paddle.Tensor]) – 厄密矩阵

  • eps (float, optional) – 容错率

返回:

决定是否 \(P - P^\dagger = 0\)

返回类型:

bool

is_positive(mat, eps=1e-6)

验证矩阵 P 是否为半正定矩阵

参数:
  • mat (Union[np.ndarray, paddle.Tensor]) – 半正定矩阵

  • eps (float, optional) – 容错率

返回:

决定是否 \(P\) 为厄密矩阵且本征值均为非负实数

返回类型:

bool

is_state_vector(vec, eps=1e-6)

验证 vec 是否为合法的态向量

参数:
  • vec (Union[np.ndarray,paddle.Tensor]) – 候选态向量

  • eps (float, optional) – 容错率,默认为 None i.e. 不做判定

返回:

判断候选态向量是否归一,返回量子比特数量或错误信息

返回类型:

Tuple[bool,int]

备注

错误信息为 -1 时,候选量子态未归一;错误信息为 -2 时,候选量子态维度不是2的整数次方;错误信息为 -3 时, vec 不是向量。

is_density_matrix(rho, eps=None)

验证 rho 是否为合法的密度矩阵

参数:
  • rho (Union[np.ndarray,paddle.Tensor]) – 候选密度矩阵

  • eps (float, optional) – 容错率,默认为 None i.e. 不做判定

返回:

判断候选密度矩阵是否为迹数为1的半正定矩阵,返回量子比特数量或错误信息

返回类型:

Tuple[bool,int]

备注

错误信息为 -1 时,候选密度矩阵不是半正定矩阵;错误信息为 -2 时,候选密度矩阵迹数不为1;错误信息为 -3 时,候选密度矩阵维度不是2的整数次方;错误信息为 -4 时, rho 不是方阵。

is_projector(mat, eps=1e-6)

验证矩阵 P 是否为映射算子

参数:
  • mat (Union[np.ndarray, paddle.Tensor]) – 映射算子

  • eps (float, optional) – 容错率

返回:

决定是否 \(PP - P = 0\)

返回类型:

bool

is_unitary(mat, eps=1e-5)

验证矩阵 P 是否为酉矩阵

参数:
  • mat (Union[np.ndarray, paddle.Tensor]) – 酉矩阵

  • eps (float, optional) – 容错率

返回:

决定是否 \(PP^\dagger - I = 0\)

返回类型:

bool

hermitian_random(num_qubits)

随机生成一个厄密矩阵

参数:

num_qubits (int) – 量子比特数 n

返回:

一个 \(2^n \times 2^n\) 厄密矩阵 (n 为量子比特数)

返回类型:

paddle.Tensor

orthogonal_projection_random(num_qubits)

随机生成一个秩是 1 的正交投影算子

参数:

num_qubits (int) – 量子比特数 n

返回:

一个 \(2^n \times 2^n\) 正交投影算子 (n 为量子比特数)

返回类型:

paddle.Tensor

density_matrix_random(num_qubits)

随机生成一个密度矩阵

参数:

num_qubits (int) – 量子比特数 n

返回:

一个 \(2^n \times 2^n\) 密度矩阵 (n 为量子比特数)

返回类型:

paddle.Tensor

unitary_random(num_qubits)

随机生成一个酉矩阵

参数:

num_qubits (int) – 量子比特数 n

返回:

一个 \(2^n \times 2^n\) 酉矩阵 (n 为量子比特数)

返回类型:

paddle.Tensor

unitary_hermitian_random(num_qubits)

随机生成一个厄密酉矩阵

参数:

num_qubits (int) – 量子比特数 n

返回:

一个 \(2^n \times 2^n\) 厄密共轭酉矩阵 (n 为量子比特数)

返回类型:

paddle.Tensor

unitary_random_with_hermitian_block(num_qubits, is_unitary)

随机生成一个左上半部分为厄密矩阵的酉矩阵

参数:
  • num_qubits (int) – 量子比特数 n

  • is_unitary (bool, optional) – 厄密矩阵块是否是酉矩阵的 1/2

返回:

一个左上半部分为厄密矩阵的 \(2^n \times 2^n\) 酉矩阵 (n 为量子比特数)

返回类型:

paddle.Tensor

block_enc_herm(mat, num_block_qubits)

生成厄密矩阵的分组编码

参数:
  • mat (Union[np.ndarray, paddle.Tensor]) – 用于分组编码的矩阵

  • num_block_qubits (int, optional) – 用于分组编码的辅助量子比特数

返回:

返回分组编码后的酉矩阵

返回类型:

Union[np.ndarray, paddle.Tensor]

haar_orthogonal(num_qubits)

生成一个服从 Haar random 的正交矩阵。采样算法参考文献: arXiv:math-ph/0609050v2

参数:

num_qubits (int) – 量子比特数 n

返回:

一个 \(2^n \times 2^n\) 正交矩阵 (n 为量子比特数)

返回类型:

paddle.Tensor

haar_unitary(num_qubits)

生成一个服从 Haar random 的酉矩阵。采样算法参考文献: arXiv:math-ph/0609050v2

参数:

num_qubits (int) – 量子比特数 n

返回:

一个 \(2^n \times 2^n\) 酉矩阵 (n 为量子比特数)

返回类型:

paddle.Tensor

haar_state_vector(num_qubits, is_real=False)

生成一个服从 Haar random 的态矢量。采样算法参考文献: arXiv:math-ph/0609050v2

参数:
  • num_qubits (int) – 量子比特数 n

  • is_real (bool, optional) – 生成的态矢量是否为实数

返回:

一个 \(2^n \times 1\) 态矢量 (n 为量子比特数)

返回类型:

paddle.Tensor

haar_density_operator(num_qubits, rank=None, is_real=False)

生成一个服从 Haar random 的密度矩阵

参数:
  • num_qubits (int) – 量子比特数 n

  • rank (int, optional) – 矩阵秩, 默认满秩

  • is_real (bool, optional) – 生成的态矢量是否为实数

返回:

一个 \(2^n \times 2^n\) 密度矩阵 (n 为量子比特数)

返回类型:

paddle.Tensor

direct_sum(A, B)

计算A和B的直和

参数:
  • A (Union[np.ndarray, paddle.Tensor]) – \(m \times n\) 的矩阵

  • B (Union[np.ndarray, paddle.Tensor]) – \(p \times q\) 的矩阵

返回:

A和B的直和,维度为 \((m + p) \times (n + q)\)

返回类型:

Union[np.ndarray, paddle.Tensor]

NKron(matrix_A, matrix_B, *args)

计算两个及以上的矩阵的克罗内克乘积

参数:
  • matrix_A (Union[np.ndarray, paddle.Tensor]) – 矩阵

  • matrix_B (Union[np.ndarray, paddle.Tensor]) – 矩阵

  • *args (Union[np.ndarray, paddle.Tensor]) – 更多矩阵

from paddle_quantum.state import density_op_random
from paddle_quantum.linalg import NKron
A = density_op_random(2)
B = density_op_random(2)
C = density_op_random(2)
result = NKron(A, B, C)

备注

上述代码块的 result 应为 \(A \otimes B \otimes C\)

返回:

克罗内克乘积

返回类型:

Union[np.ndarray, paddle.Tensor]

herm_transform(fcn, mat, ignore_zero)

厄密矩阵的函数变换

参数:
  • fcn (Callable[[float], float]) – 可以展开成泰勒级数的函数 f

  • mat (Union[paddle.Tensor, np.ndarray, State]) – 厄密矩阵 \(H\)

  • ignore_zero (bool, optional) – 是否忽略特征值0所在的特征空间,默认为 False

返回:

\(f(H)\)

返回类型:

paddle.Tensor

pauli_basis_generation(num_qubits)

生成一组泡利基

参数:

num_qubits (int) – 量子比特数 \(n\)

返回:

空间 \(\mathbb{C}^{2^n \times 2^n}\) 上的泡利基

返回类型:

List[paddle.Tensor]

pauli_decomposition(mat)

目标矩阵在泡利基下的分解

参数:

mat (Union[np.ndarray, paddle.Tensor]) – 目标矩阵

返回:

泡利基的系数列表

返回类型:

Union[np.ndarray, paddle.Tensor]

subsystem_decomposition(mat, first_basis, second_basis, inner_prod)

目标矩阵在两个子系统中给定两个基上的分解

参数:
  • mat (Union[np.ndarray, paddle.Tensor]) – 目标矩阵 \(w\)

  • first_basis (Union[List[np.ndarray], List[paddle.Tensor]]) – 第一个空间上的基 \(\{e_i\}_i\)

  • second_basis (Union[List[np.ndarray], List[paddle.Tensor]]) – 第二个空间上的基 \(\{f_j\}_j\)

  • inner_prod (Union[Callable[[np.ndarray, np.ndarray], np.ndarray], Callable[[paddle.Tensor, paddle.Tensor], paddle.Tensor]]) – 两个空间上的内积

返回:

系数矩阵 \([\beta_{ij}]\) 满足 \(w = \sum_{i, j} \beta_{ij} e_i \otimes f_j\)

返回类型:

Union[np.ndarray, paddle.Tensor]