mindspore.ops.addr

mindspore.ops.addr(x, vec1, vec2, beta=1, alpha=1)[source]

Executes the outer-product of vec1 and vec2 and adds it to the matrix x.

If vec1 is a vector of size \(N\) and vec2 is a vector of size \(M\), then x must be broadcastable with a matrix of size \((N, M)\) and out will be a matrix of size \((N, M)\).

The optional values beta and alpha are the scale factors on the outer product between vec1 and vec2 and the added matrix x respectively. If beta is 0, then x will be ignored.

\[output = β x + α (vec1 ⊗ vec2)\]
Parameters
  • x (Tensor) – Vector to be added. The shape of the tensor is \((N, M)\).

  • vec1 (Tensor) – The first tensor to be multiplied. The shape of the tensor is \((N,)\).

  • vec2 (Tensor) – The second tensor to be multiplied. The shape of the tensor is \((M,)\).

  • beta (scalar[int, float, bool], optional) – Multiplier for x (β). The beta must be int or float or bool, Default: 1.

  • alpha (scalar[int, float, bool], optional) – Multiplier for vec1vec2 (α). The alpha must be int or float or bool, Default: 1.

Returns

Tensor, the shape of the output tensor is \((N, M)\), has the same dtype as x.

Raises
  • TypeError – If x, vec1, vec2 is not a Tensor.

  • TypeError – If inputs x, vec1, vec2 are not the same dtype.

  • ValueError – If x is not a 2-D Tensor. If vec1, vec2 is not a 1-D Tensor.

Supported Platforms:

Ascend GPU CPU

Examples

>>> 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.]]