paddle_quantum.linalg
量桨中的线性代数的功能实现。
- 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]