User:Fropuff/Draft 8
From Wikipedia, the free encyclopedia
[edit] Tensor product
The tensor product, denoted by the symbol ⊗, refers to a number of closely related operations in mathematics. The unifying concept is that the tensor product represents the most general bilinear (or multilinear) product. The study of tensors, tensor spaces, and tensor products forms a branch of mathematics called multilinear algebra.
Contents |
[edit] Overview
The tensor product can be thought of as the “most general” bilinear product on a pair of vectors. Given vector spaces V, W, and X, a bilinear map is a function on the cartesian product V × W to X which is separately linear in each argument. That is, fixing either the first or second argument results in a linear map.
The tensor product on vectors is defined to be a bilinear map on V and W to a new vector space V⊗W called the tensor product space:
The elements of V⊗W can be thought of as formal linear combinations of symbols v⊗w for v ∈ V and w ∈ W, subject only to the relations necessary for bilinearity. That is, one must have:
Combining the first two properties we have
Note that the symbol ⊗ is overloaded: it is used to denote the tensor product of two vectors as well as the tensor product of two vector spaces.
Given a fixed vector space V, one can take the tensor product of V with itself k times:
The resulting space is called the kth tensor power of V. The elements of such a space are called tensors of rank k on V. The tensor product of a rank m tensor and a rank n tensor is naturally a rank m+n tensor. By taking the direct sum of all tensor powers of V one obtains a space called the tensor algebra of V. The tensor product (of tensors) is the natural multiplication operator in this algebra.
[edit] Tensor product of vector spaces
Let V and W be vector spaces over a fixed field K. The tensor product of V and W is another vector space over K together with a universal bilinear map
The universality of this map means the following: for any vector space X, and any bilinear map B: V×W → X there exists a unique linear map L: V⊗W → X such that L(v⊗w) = B(x, y).
The tensor product space V⊗W is determined up to a unique isomorphism by the above universal property.
Given bases {vi} and {wi} for V and W respectively, the tensors of the form forms a basis for . The dimension of the tensor product therefore is the product of dimensions of the original spaces; for instance will have dimension mn.
[edit] Generalizations
See tensor product of modules over a ring
[edit] Tensor product of tensors
Let V be a vector space over a field K. For any nonnegative integer k, the kth tensor power of V is the tensor product of V with itself k times:
By convention T0V is the ground field K (as a one-dimensional vector space over itself). The elements of TkV are called tensors of rank k on V.
Associativity of the tensor product means that there is a canonical isomorphism
In other words, given a rank k tensor and a rank ℓ tensor their tensor product can be interpreted as a rank k + ℓ tensor.
[edit] Coordinate description
Given a basis {ei} for V, a basis for TkV is given by
A general rank k tensor is written (using the summation convention) as:
In terms of these coordinates the tensor product is just given by ordinary multiplication of components. That is,
[edit] Tensor product of linear transformations
The set of all linear transformations from one vector space to another forms a vector space itself. One can therefore take the tensor product of linear transformations. Such a tensor product can be naturally interpreted as a linear transformation on a tensor product.
Specifically, there exists is a natural linear map
determined by
This map is a linear embedding, which is to say that its kernel is zero. If all spaces in question are finite-dimensional, this map is a actually a linear isomorphism.
There are several special cases of this embedding which can be obtained by taking one or more of the spaces to be the ground field K. Specifically, one has natural embeddings
and
[edit] Kronecker product
Main article: Kronecker product.
With matrices this operation is usually called the Kronecker product, a term used to make clear that the result has a particular block structure imposed upon it, in which each element of the first matrix is replaced by the second matrix, scaled by that element. For matrices U and V this is:
[edit] Relation with the dual space
Note that the space (the dual space of containing all linear functionals on that space) corresponds naturally to the space of all bilinear functionals on . In other words, every bilinear functional is a functional on the tensor product, and vice versa. There is a natural isomorphism between and . So, the tensors of the linear functionals are bilinear functionals. This gives us a new way to look at the space of bilinear functionals, as a tensor product itself.
[edit] Tensor product of multilinear maps
Given multilinear maps f(x1,...xk) and g(x1,...xm) their tensor product is the multilinear function
[edit] Computer programming
Tensors in computer programming are almost always represented as n-dimensional arrays of numbers, where n is the rank of the tensor. The tensor product is an operation which takes a rank-n tensor and a rank-m tensor and computes the resulting rank-(n+m) tensor.
A prototypical algorithm for doing this is given below in the C programming language. Here a is a rank-two tensor and b is a rank-one tensor, with indices i, j, and k, respectively.
for( int i = 0; i < i_dim; i++) for( int j = 0; j < j_dim; j++) for( int k = 0; k < k_dim; k++) result[i][j][k] = a[i][j]*b[k];
Many array programming languages may have this pattern built in. For example, in APL the tensor product is expressed as A ∘.× B
, while in J the tensor product is the expressed as a */ b
. In Mathematica, the tensor product is given by
Outer[Times, a, b]
However, these kinds of notation are not universally present in all array languages. Some languages may require explicit treatment of indices (for example, Matlab).
Another interesting example of the tensor product comes from SQL. Here the tensor product of a and b can be given by the following code:
select a.i as i, a.j as j, b.k as k, a.value * b.value as value from a outer join b