qml.numpy

概述

PennyLane NumPy子包提供了一个可微分的包装器,围绕NumPy,能够通过标准NumPy代码进行反向传播。

在使用PennyLane与Autograd接口时,必须使用这个版本的NumPy

>>> from pennylane import numpy as np

注意

如果使用其他接口,例如 TensorFlow PyTorchJAX,那么不应该使用PennyLane提供的NumPy;相反,应该直接使用标准的NumPy导入。

该包是一个封装在 autograd.numpy 之上的工具;有关所有可用函数的详细信息,请参考 Autograd docs

PennyLane 还扩展了 Autograd,增加了以下类、错误和函数:

wrap_arrays

遍历对象的符号表,使用 tensor_wrapper() 包裹每个函数。

extract_tensors

遍历一个可迭代对象,并提取出现的任何PennyLane张量。

tensor_wrapper

装饰器,包装可调用对象和类,使它们都接受一个 requires_grad 关键字参数,并返回一个 PennyLane tensor

tensor

构造一个用于Autograd QNodes的PennyLane张量。

NonDifferentiableError

如果尝试使用Autograd对不可训练的 tensor 进行微分,则会引发异常。

注意事项

该包是一个封装在 autograd.numpy 之上的工具,因此存在从Autograd继承的一些注意事项:

请勿使用:

  • 赋值给数组,例如 A[0, 0] = x.

  • 列表隐式转换为数组,例如 A = np.sum([x, y])。确保首先显式转换为NumPy数组,即使用 A = np.sum(np.array([x, y])) 替代。

  • A.dot(B) 表示法。请使用 np.dot(A, B)A @ B 替代。

  • 就地操作,例如 a += b。请改用 a = a + b

  • 一些 isinstance 检查,比如 isinstance(x, np.ndarray)isinstance(x, tuple),而没有先执行 from autograd.builtins import isinstance, tuple

有关更多详细信息,请参考Autograd docs