mindspore.ops.addr

mindspore.ops.addr(x, vec1, vec2, *, beta=1, alpha=1)[源代码]

计算 vec1vec2 的外积,并将其添加到 x 中。

如果 vec1 是一个大小为 \(N\) 的向量, vec2 是一个大小为 \(M\) 的向量,那么 x 必须可以和大小为 \((N, M)\) 的矩阵广播。

可选值 bataalpha 分别是 vec1vec2 外积以及附加矩阵 x 的扩展因子。如果 beta 为0,那么 x 将不参与计算。

\[output = β x + α (vec1 ⊗ vec2)\]
参数:
  • x (Tensor) - 需要相加的向量。Tensor的shape是 \((N, M)\)

  • vec1 (Tensor) - 第一个需要相乘的Tensor,shape大小为 \((N,)\)

  • vec2 (Tensor) - 第二个需要相乘的Tensor,shape大小为 \((M,)\)

关键字参数:
  • beta (scalar[int, float, bool], 可选) - x (β)的乘数。 beta 必须是int或float或bool类型,默认值:1。

  • alpha (scalar[int, float, bool], 可选) - vec1vec2 (α)的乘数。 alpha 必须是int或float或bool类型,默认值:1。

返回:

Tensor,shape大小为 \((N, M)\) ,数据类型与 x 相同。

异常:
  • TypeError - xvec1vec2 不是Tensor。

  • TypeError - vec1vec2 的数据类型不一致。

  • ValueError - 如果 vec1vec2 不是一个一维Tensor。

支持平台:

Ascend GPU CPU

样例:

>>> x = Tensor(np.array([[2., 2.], [3., 2.], [3., 4.]], np.float32))
>>> vec1 = Tensor(np.array([2., 3., 2.], np.float32))
>>> vec2 = Tensor(np.array([3, 4], np.float32))
>>> output = ops.addr(x, vec1, vec2)
>>> print(output)
[[ 8. 10.]
 [12. 14.]
 [ 9. 12.]]