mindspore.ops.addr

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

Computes the outer product of two vector vec1 and vec2, and adds the resulting matrix to x.

Given vec1 and vec2 of sizes \(N\) and \(M\), x must be able to broadcast to a matrix of shape \((N, M)\).

beta and alpha are optional scaling factors for the outer product of vec1 and vec2, and the matrix x respectively. Setting beta to 0 will exclude x from the computation.

\[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,)\).

Keyword Arguments
  • 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 vec1, vec2 are not the same dtype.

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

Supported Platforms:

Ascend GPU CPU

Examples

>>> import numpy as np
>>> from mindspore import Tensor, ops
>>> 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.]]