a.b.c or Dot[a,b,c]

gives products of vectors, matrices, and tensors.


  • a.b gives an explicit result when a and b are lists with appropriate dimensions. It contracts the last index in a with the first index in b.
  • Various applications of Dot:
  • {a1,a2}.{b1,b2}scalar product of vectors
    product of a vector and a matrix
    product of a matrix and a vector
    product of two matrices
  • The result of applying Dot to two tensors and is the tensor . Applying Dot to a rank tensor and a rank tensor gives a rank tensor. »
  • Dot can be used on SparseArray and structured array objects. It will return an object of the same type as the input when possible. »
  • Dot is linear in all arguments. » It does not define a complex (Hermitian) inner product on vectors. »
  • When its arguments are not lists or sparse arrays, Dot remains unevaluated. It has the attribute Flat.


open allclose all

Basic Examples  (4)

Scalar product of vectors in three dimensions:

Scalar product of vectors in two dimensions:

Vectors are perpendicular if their inner product is zero:

Visualize the vectors:

The product of a matrix and a vector:

The product TemplateBox[{v}, Transpose]M of a vector and a matrix:

The product TemplateBox[{v}, Transpose]Mw of a matrix and two vectors:

The product of two matrices:

Multiply in the other order:

Use rectangular matrices:

Scope  (26)

Dot Products of Vectors  (7)

Scalar product of machine-precision vectors:

Dot product of exact vectors:

Inner product of symbolic vectors:

The dot product of arbitrary-precision vectors:

Dot allows complex inputs, but does not conjugate any of them:

To compute the complex or Hermitian inner product, apply Conjugate to one of the inputs:

Some sources, particularly in the mathematical literature, conjugate the second argument:

Compute the norm of u using the two inner products:

Verify the result using Norm:

Dot product of sparse vectors:

Compute the scalar product of two QuantityArray vectors:

Matrix-Vector Multiplication  (5)

Define a rectangular matrix of dimensions :

Define a 2-vector and a 3-vector:

The matrix can be multiplied by the 2-vector only on the left:

Multiplying in the opposite order produces an error message due to the incompatible shapes:

Similarly, the matrix can be multiplied by the 3-vector only on the right:

Multiply the matrix on both sides at once:

Define a square matrix and a compatible vector:

The products m.v and v.m return different vectors:

The product v.m.v is a scalar:

Define a column and row matrices c and r with the same numerical entries as v:

Products involving m, c and r have the same entries as those involving m and v, but are all matrices:

Moreover, the products must be done in an order that respects the matrices' shapes:

Define a matrix and two vectors:

Since is a vector, is an allowed product:

Note that it is effectively multiplying on the left side of the matrix, not the right:

The product of a sparse matrix and sparse vector is a sparse vector:

Format the result as a row matrix:

The product of a sparse matrix and an ordinary vector is a normal vector:

The product of a structured matrix with a vector will retain the structure if possible:

The product of a normal matrix with a structured vector may have the structure of the vector:

Matrix-Matrix Multiplication  (9)

Multiply real machine-number matrices:

Product of complex matrices:

Product of exact matrices:

Multiply in the other order:

Visualize the input and output matrices:

Multiply arbitrary-precision matrices:

Since , these matrices cannot be multiplied in the opposite order:

Product of symbolic matrices:

The product of sparse matrices is another sparse matrix:

Format the result:

The product of structured matrices preserves the structure if possible:

Format the result:

Cube a matrix:

Compare with MatrixPower:

Raise a matrix to the tenth power using Dot in combination with Apply (@@) and ConstantArray:

Verify the result:

Efficiently multiply large matrices:

Higher-Rank Arrays  (5)

Dot works for arrays of any rank:

The dimensions of the result are those of the input with the common dimension collapsed:

Any combination is allowed as long as products are done with a common dimension:

Create a rank-three array with three equal dimensions:

Create three vectors of the same dimension:

is the complete contraction that pairs with 's last level and with its first:

is the different contraction that pairs with 's first level and with its last:

Contract both levels of m with the second and third levels of a, respectively:

Dot of two sparse arrays is generally another sparse array:

Dot of a sparse array and an ordinary list may be another sparse array or an ordinary list:

Format the rank-three array:

The product of two SymmetrizedArray objects is generally another symmetrized array:

The symmetry of the new array may be much more complicated than the symmetry of either input:

Applications  (16)

Projections and Bases  (6)

Project the vector on the line spanned by the vector :

Visualize and its projection onto the line spanned by :

Project the vector on the plane spanned by the vectors and :

First, replace with a vector in the plane perpendicular to :

The projection in the plane is the sum of the projections onto and :

Find the component perpendicular to the plane:

Confirm the result by projecting onto the normal to the plane:

Visualize the plane, the vector and its parallel and perpendicular components:

Apply the GramSchmidt process to construct an orthonormal basis from the following vectors:

The first vector in the orthonormal basis, , is merely the normalized multiple :

For subsequent vectors, components parallel to earlier basis vectors are subtracted prior to normalization:

Confirm the answers using Orthogonalize:

Define a basis for :

Verify that the basis is orthonormal:

Find the components of a general vector with respect to this new basis:

Verify the components with respect to the :

Define a basis for :

Verify that it is a basis by showing that the matrix formed by the vectors has nonzero determinant:

The change of basis matrix is the inverse of the matrix whose columns are the :

A vector whose coordinates are in the standard bases will have coordinates with respect to :

Verify that these coordinates give back the vector :

The FrenetSerret system encodes every space curve's properties in a vector basis and scalar functions. Consider the following curve:

Construct an orthonormal basis from the first three derivatives by subtracting parallel projections:

Ensure that the basis is right-handed:

Compute the curvature, , and torsion, , which quantify how the curve bends:

Verify the answers using FrenetSerretSystem:

Visualize the curve and the associated moving basis, also called a frame:

Matrices and Linear Operators  (6)

A matrix is orthogonal of A TemplateBox[{A}, Transpose]=Id. Show that a rotation matrix is orthogonal:

Confirm using OrthogonalMatrixQ:

A matrix is unitary of . Show that Pauli matrices are unitary:

Confirm with UnitaryMatrixQ:

A matrix is normal if . Show that the following matrix is normal:

Confirm using NormalMatrixQ:

Normal matrices include many other types of matrices as special cases. Unitary matrices are normal:

Hermitian or self-adjoint matrices for which A=TemplateBox[{A}, ConjugateTranspose] are also normal, as the matrix shows:

However, the matrix is not a named type of normal matrix such as unitary or Hermitian:

In quantum mechanics, systems with finitely many states are represented by unit vectors and physical quantities by matrices that act on them. Consider a spin-1/2 particle such as an electron. It might be in a state such as the following:

The angular momentum in the direction is given by the following matrix:

The angular momentum of this state is :

The uncertainty in the angular momentum of this state is :

The uncertainty in the direction is computed analogously:

The uncertainty principle gives a lower bound on the product of uncertainties, :

Consider a linear mapping :

Get the matrix representation for :

Create a vector to be acted upon:

Apply the linear mapping to the vector using different methods:

Using with Dot is the faster method:

The application of a single matrix to multiple vectors can be computed as {v_i}.TemplateBox[{m}, Transpose]:

The matrix method is significantly faster than repeated application:

Matrices and Arrays with Symmetry  (4)

A real symmetric matrix gives a quadratic form q:TemplateBox[{}, Reals]^n->TemplateBox[{}, Reals] by the formula :

Quadratic forms have the property that :

Equivalently, they define a homogeneous quadratic polynomial in the variables of TemplateBox[{}, Reals]^n:

The range of the polynomial can be TemplateBox[{}, NonNegativeReals], TemplateBox[{}, NonPositiveReals], TemplateBox[{}, Reals] or . In this case it is TemplateBox[{}, Reals]:

Visualize the polynomial:

A positive-definite, real symmetric matrix or metric defines an inner product by :

Being positive-definite means that the associated quadratic form is negative for :

Note that Dot itself is the inner product associated with the identity matrix:

Apply the GramSchmidt process to the standard basis to obtain an orthonormal basis:

Confirm that this basis is orthonormal with respect to the inner product :

An antisymmetric matrix for which defines a Hamiltonian 2-form :

Verify the conditions on :

is identically zero:

However, the form is nondegenerate, meaning implies :

Construct six vectors in dimension six:

Construct the totally antisymmetric array in dimension six using LeviCivitaTensor:

Compute the complete contraction sum_( i_1... i_6) epsilon_(i_1,i_2,...,i_6)TemplateBox[{a, {i, _, 1}}, Superscript] TemplateBox[{b, {i, _, 2}}, Superscript]... TemplateBox[{f, {i, _, 6}}, Superscript]:

This is equal to the determinant of the matrix formed by the vectors:

By the antisymmetry of , the reversed contraction differs by in dimension :

Properties & Relations  (15)

Dot is linear in each argument:

For a vector with real entries, Norm[v] equals :

For a vector with complex values, the norm is given by sqrt(v.TemplateBox[{v}, Conjugate])⩵sqrt(TemplateBox[{v}, Conjugate].v):

For two vectors with real entries, u_1.u_2=TemplateBox[{{u, _, 1}}, Norm] TemplateBox[{{u, _, 2}}, Norm]cos(theta) , with the angle between and :

The scalar product of vectors is invariant under rotations:

For two matrices, the , ^(th) entry of is the dot product of the ^(th) row of with the ^(th) column of :

Matrix multiplication is non-commutative, :

Use MatrixPower to compute repeated matrix products:

Compare with a direct computation:

The action of b on a vector is the same as acting four times with a on that vector:

For two tensors and , is the tensor :

Applying Dot to a rank- tensor and a rank- tensor gives a rank- tensor:

Dot with two arrays is a special case of Inner:

Dot can be implemented as a combination of TensorProduct and TensorContract:

Use Dot in combination with Flatten to contract multiple levels of one array with those of another:

TensorReduce can simplify expressions involving Dot:

Outer of two vectors can be computed with Dot:

Construct the column and row matrices corresponding to u and v:

The outer product equals c.r:

Dot of a row and column matrix equals the KroneckerProduct of the corresponding vectors:

Possible Issues  (2)

Dot effectively treats vectors multiplied from the right as column vectors:

Dot effectively treats vectors multiplied from the left as row vectors:

Dot does not give the standard inner product on :

Use Conjugate in one argument to get the Hermitian inner product:

Check that the result coincides with the square of the norm of a:

Wolfram Research (1988), Dot, Wolfram Language function, (updated 2012).


Wolfram Research (1988), Dot, Wolfram Language function, (updated 2012).


@misc{reference.wolfram_2021_dot, author="Wolfram Research", title="{Dot}", year="2012", howpublished="\url{}", note=[Accessed: 30-July-2021 ]}


@online{reference.wolfram_2021_dot, organization={Wolfram Research}, title={Dot}, year={2012}, url={}, note=[Accessed: 30-July-2021 ]}


Wolfram Language. 1988. "Dot." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2012.


Wolfram Language. (1988). Dot. Wolfram Language & System Documentation Center. Retrieved from