dot(coeffs, ops, pauli=False)[source]

Returns the dot product between the coeffs vector and the ops list of operators.

This function returns the following linear combination: \(\sum_{k} c_k O_k\), where \(c_k\) and \(O_k\) are the elements inside the coeffs and ops arguments, respectively.

  • coeffs (Sequence[float, Callable]) – sequence containing the coefficients of the linear combination

  • ops (Sequence[Operator]) – sequence containing the operators of the linear combination

  • pauli (bool, optional) – If True, a PauliSentence operator is used to represent the linear combination. If False, a Sum operator is returned. Defaults to False.


ValueError – if the number of coefficients and operators does not match or if they are empty


operator describing the linear combination

Return type

Operator or ParametrizedHamiltonian


>>> coeffs = np.array([1.1, 2.2])
>>> ops = [qml.PauliX(0), qml.PauliY(0)]
>>> qml.dot(coeffs, ops)
(1.1*(PauliX(wires=[0]))) + (2.2*(PauliY(wires=[0])))
>>> qml.dot(coeffs, ops, pauli=True)
1.1 * X(0)
+ 2.2 * Y(0)

pauli=True can be used to construct a more efficient, simplified version of the operator. Note that it returns a PauliSentence, which is not an Operator. This specialized representation can be converted to an operator:

>>> qml.dot([1, 2], [qml.PauliX(0), qml.PauliX(0)], pauli=True).operation()

Using pauli=True and then converting the result to an Operator is much faster than using pauli=False, but it only works for pauli words (see is_pauli_word()).

If any of the parameters listed in coeffs are callables, the resulting dot product will be a ParametrizedHamiltonian:

>>> coeffs = [lambda p, t: p * jnp.sin(t) for _ in range(2)]
>>> ops = [qml.PauliX(0), qml.PauliY(0)]
>>> qml.dot(coeffs, ops)
  (<lambda>(params_0, t)*(PauliX(wires=[0])))
+ (<lambda>(params_1, t)*(PauliY(wires=[0])))


Using PennyLane