ArrayExpand[expr]
expands out symbolic array operations in expr.
ArrayExpand[expr,assum]
expands using assumptions assum.
ArrayExpand
ArrayExpand[expr]
expands out symbolic array operations in expr.
ArrayExpand[expr,assum]
expands using assumptions assum.
Details and Options
- ArrayExpand can be used for expanding out symbolic array operations.
- ArrayExpand makes use of multilinearity of array operations, as well as of numerous array, matrix and vector operation identities.
- Dimensionality of symbolic arguments can be specified through assumptions or by using ArraySymbol, MatrixSymbol or VectorSymbol.
- Symbolic arguments of unspecified dimensionality are assumed to be arrays of dimensions appropriate for the functions they are used in. In multi-argument Listable functions, like Plus or Times, all arguments are assumed to have the same dimensions unless specified differently. »
- The following options can be given:
-
Assumptions $Assumptions default assumptions to be appended to assum GenerateConditions False whether to generate conditions on parameters - You can specify default assumptions for ArrayExpand using Assuming.
Examples
open all close allBasic Examples (3)
Expand out Dot product of sums of arrays:
ArrayExpand[(a + b).(c + d)]Expand out Tr of a linear combination of arrays:
ArrayExpand[Tr[s a + t b], Element[s | t, Complexes]]Expand out Inverse of Dot product of matrices:
ArrayExpand[Inverse[MatrixSymbol["a", {n, n}].MatrixSymbol["b", {n, n}]]]Scope (45)
Multilinear Operations (12)
Elementwise products of linear combinations:
ArrayExpand[(2 ArraySymbol["a", {p, q, r}] + 3 ArraySymbol["b", {p, q, r}]) (4 ArraySymbol["c", {p, q, r}] + 5 ArraySymbol["d", {p, q, r}])]Dot products of linear combinations:
ArrayExpand[(2a + 3b).(4c + 5d)]ArrayDot products of linear combinations:
ArrayExpand[ArrayDot[2a + 3b, 4c + 5d, 2]]TensorProduct of linear combinations:
ArrayExpand[TensorProduct[2a + 3b, 4c + 5d, 6e]]KroneckerProduct of linear combinations:
ArrayExpand[KroneckerProduct[2a + 3b, 4c + 5d]]TensorWedge of linear combinations:
ArrayExpand[TensorWedge[2a + 3b, 4c + 5d]]Cross product of linear combinations:
ArrayExpand[Cross[2a + 3b, 4c + 5d]]Tr of linear combinations:
ArrayExpand[Tr[2a + 3b + 4c]]TensorContract of linear combinations:
ArrayExpand[TensorContract[2a + 3b + 4c + 5d, {{2, 3}}]]HodgeDual of linear combinations:
ArrayExpand[HodgeDual[s a + t b], Element[s | t, Reals]]Transpose of linear combinations:
ArrayExpand[Transpose[s a + t b], Element[s | t, Reals]]ConjugateTranspose of linear combinations:
ArrayExpand[ConjugateTranspose[2 a + I b + (3 + 2I)c]]Array Operations (6)
Tr of Transpose, Conjugate and ConjugateTranspose:
ArrayExpand[Tr[Transpose[a]]]ArrayExpand[Tr[Conjugate[a]]]ArrayExpand[Tr[ConjugateTranspose[a]]]Conjugate of array operations:
ArrayExpand[Conjugate[a.b]]ArrayExpand[Conjugate[ArrayDot[a, b, 2]]]ArrayExpand[Conjugate[TensorProduct[a, b]]]ArrayExpand[Conjugate[KroneckerProduct[a, b]]]ArrayExpand[Conjugate[TensorWedge[a, b]]]ArrayExpand[Conjugate[Cross[a, b]]]Conjugate and ConjugateTranspose of elementary functions:
ArrayExpand[Conjugate[Sin[VectorSymbol["v", n]]]]ArrayExpand[ConjugateTranspose[ArcTan[a]]]ArrayExpand[Conjugate[(MatrixSymbol["a", {n, n}])^k], k∈ℤ]ArrayExpand[ConjugateTranspose[t ^ a], t > 0]Transpose of Listable mathematical functions:
ArrayExpand[Transpose[a ^ b]]ArrayExpand[Transpose[Beta[a, b]]]Dot product of TensorProduct:
ArrayExpand[TensorProduct[a, b, c].TensorProduct[d, e], Element[c | d, Vectors[n]]]ArrayExpand[TensorProduct[a, b, c].TensorProduct[d, e], Element[c | d, Matrices[{n, n}]]]Commutativity of scalar-valued ArrayDot:
ArrayExpand[ArrayDot[b, a, 3], Element[a | b, Arrays[{m, n, p}]]]Matrix Operations (13)
Inverse, MatrixPower, PseudoInverse and Adjugate of a scalar multiple:
ArrayExpand[Inverse[3a]]ArrayExpand[MatrixPower[3a, n]]ArrayExpand[PseudoInverse[3a]]ArrayExpand[Adjugate[3 a], Element[a, Matrices[{n, n}]]]Inverse and Adjugate of Dot products:
ArrayExpand[Inverse[a.b.c], Element[a | b | c, Matrices[{n, n}]]]ArrayExpand[Adjugate[a.b.c], Element[a | b | c, Matrices[{n, n}]]]Transpose, Conjugate and ConjugateTranspose of Inverse, Adjugate and PseudoInverse:
ArrayExpand[Transpose[Inverse[a]]]ArrayExpand[Conjugate[Inverse[a]]]ArrayExpand[ConjugateTranspose[Inverse[a]]]ArrayExpand[Transpose[Adjugate[a]]]ArrayExpand[Conjugate[Adjugate[a]]]ArrayExpand[ConjugateTranspose[Adjugate[a]]]ArrayExpand[Transpose[PseudoInverse[a]]]ArrayExpand[Conjugate[PseudoInverse[a]]]ArrayExpand[ConjugateTranspose[PseudoInverse[a]]]Transpose, Conjugate and ConjugateTranspose of MatrixPower:
ArrayExpand[Transpose[MatrixPower[a, -7]]]ArrayExpand[Conjugate[MatrixPower[a, 3]]]ArrayExpand[ConjugateTranspose[MatrixPower[a, 5]]]Transpose, Conjugate and ConjugateTranspose of MatrixExp:
ArrayExpand[Transpose[MatrixExp[a]]]ArrayExpand[Conjugate[MatrixExp[a]]]ArrayExpand[ConjugateTranspose[MatrixExp[a]]]Transpose and ConjugateTranspose of Dot products:
ArrayExpand[Transpose[a.b.c], Element[a | b | c, Matrices[{n, n}]]]ArrayExpand[ConjugateTranspose[a.b.c], Element[a | b | c, Matrices[{n, n}]]]MatrixPower of a linear combination:
ArrayExpand[MatrixPower[2a + 3b, 3]]Negative exponent MatrixPower of a Dot product:
ArrayExpand[MatrixPower[a.b, -3], Element[a | b, Matrices[{n, n}]]]ArrayExpand[Tr[b.a.Inverse[b]], Element[a | b, Matrices[{n, n}]]]ArrayExpand[Tr[Inverse[b].a.b], Element[a | b, Matrices[{n, n}]]]ArrayExpand[Tr[b.c.a], Element[a | b | c, Matrices[{n, n}]]]ArrayExpand[Tr[a.(Transpose[b]c)], Element[a | b | c, Matrices[{n, n}]]]Det composed with matrix operations:
ArrayExpand[Det[3a], Element[a, Matrices[{n, n}]]]ArrayExpand[Det[Transpose[a]]]ArrayExpand[Det[Conjugate[a]]]ArrayExpand[Det[ConjugateTranspose[a]]]ArrayExpand[Det[Inverse[a]]]ArrayExpand[Det[Adjugate[a]], Element[a, Matrices[{n, n}]]]ArrayExpand[Det[MatrixPower[a, 7]]]ArrayExpand[Det[b.a.Inverse[b]]]ArrayExpand[Det[Inverse[b].a.b]]ArrayExpand[Det[a.b.c], Element[a | b | c, Matrices[{n, n}]]]Matrix operations with KroneckerProduct arguments:
ArrayExpand[Transpose[KroneckerProduct[a, b, c]], Element[a | b | c, Matrices[{m, n}]]]ArrayExpand[ConjugateTranspose[KroneckerProduct[a, b, c]], Element[a | b | c, Matrices[{m, n}]]]ArrayExpand[Inverse[KroneckerProduct[a, b, c]], Element[a | b | c, Matrices[{n, n}]]]ArrayExpand[PseudoInverse[KroneckerProduct[a, b, c]], Element[a | b | c, Matrices[{m, n}]]]ArrayExpand[Tr[KroneckerProduct[a, b, c]], Element[a | b | c, Matrices[{n, n}]]]ArrayExpand[KroneckerProduct[a, b].KroneckerProduct[c, d].KroneckerProduct[e, f], Element[a | b | c | d | e | f, Matrices[{n, n}]]]ArrayExpand[Det[KroneckerProduct[a, b, c]], Element[a, Matrices[{k, k}]] && Element[b, Matrices[{m, m}]] && Element[c, Matrices[{n, n}]]]ArrayExpand[MatrixPower[KroneckerProduct[a, b, c], k], Element[a | b | c, Matrices[{n, n}]] && Element[k, Integers]]ArrayExpand[KroneckerProduct[a, b, KroneckerProduct[c, d], e], Element[a | b | c | d | e, Matrices[{m, n}]]]Expressions involving MatrixExp:
ArrayExpand[MatrixExp[a.b.Inverse[a]]]ArrayExpand[MatrixExp[k a], Element[k, Integers]]ArrayExpand[MatrixExp[(s + t)a], Element[s | t, Complexes]]ArrayExpand[Det[MatrixExp[a]]]Vector Operations (4)
Transpose of a vector:
ArrayExpand[Transpose[v], Element[v, Vectors[n]]]Canonicalize Dot products of vectors and matrices:
ArrayExpand[w.v, Element[v | w, Vectors[n]]]ArrayExpand[v.a, Element[v, Vectors[n]] && Element[a, Matrices[{n, m}]]]ArrayExpand[v.a.w, Element[v | w, Vectors[n]] && Element[a, Matrices[{n, n}]]]ArrayExpand[a.v.b, Element[v, Vectors[n]] && Element[a, Matrices[{m, n}]] && Element[b, Matrices[{m, p}]]]ArrayExpand[a.v.b.w, Element[v, Vectors[n]] && Element[w, Vectors[p]] && Element[a, Matrices[{m, n}]] && Element[b, Matrices[{m, p}]]]Transpose of KroneckerProduct:
ArrayExpand[Transpose[KroneckerProduct[u, v]], Element[u, Vectors[m]] && Element[v, Vectors[n]]]Cross products:
ArrayExpand[Cross[a, b, c].Cross[d, e, f]]ArrayExpand[Cross[a, b, Cross[u, v, w, z], c]]Simplifications (10)
Simplifications of Inverse:
ArrayExpand[Inverse[Inverse[a]]]ArrayExpand[a.Inverse[a], Element[a, Matrices[{n, n}]]]ArrayExpand[Inverse[a].a.b]ArrayExpand[b.a.Inverse[a]]Simplifications of PseudoInverse:
ArrayExpand[PseudoInverse[PseudoInverse[a]]]ArrayExpand[a.PseudoInverse[a].a]ArrayExpand[ConjugateTranspose[PseudoInverse[a].a]]ArrayExpand[ConjugateTranspose[a.PseudoInverse[a]]]ArrayExpand[ConjugateTranspose[a].a.PseudoInverse[a]]ArrayExpand[PseudoInverse[a].a.ConjugateTranspose[a]]ArrayExpand[ConjugateTranspose[a].ConjugateTranspose[PseudoInverse[a]].PseudoInverse[a]]ArrayExpand[PseudoInverse[ConjugateTranspose[a].a]]Simplifications of Adjugate:
ArrayExpand[Adjugate[Adjugate[a]], Element[a, Matrices[{n, n}]]]ArrayExpand[Adjugate[Inverse[a]]]ArrayExpand[Inverse[Adjugate[a]]]ArrayExpand[a.Adjugate[a], Element[a, Matrices[{n, n}]]]ArrayExpand[Adjugate[a].a, Element[a, Matrices[{n, n}]]]ArrayExpand[a.Adjugate[a].b]Simplifications of MatrixPower:
ArrayExpand[MatrixPower[a, 1]]ArrayExpand[MatrixPower[a, -1]]ArrayExpand[MatrixPower[a, 0], Element[a, Matrices[{n, n}]]]ArrayExpand[MatrixPower[MatrixPower[a, k], m], Element[k | m, Integers]]ArrayExpand[MatrixPower[Inverse[a], k], Element[k, Integers]]ArrayExpand[Inverse[MatrixPower[a, k]], Element[k, Integers]]ArrayExpand[a.MatrixPower[b, k].b]ArrayExpand[a.MatrixPower[b, k].MatrixPower[b, m].c]Simplifications of Transpose, Conjugate and ConjugateTranspose:
ArrayExpand[Transpose[a, {1, 2, 3}]]ArrayExpand[Transpose[a, 1 <-> 2]]ArrayExpand[Transpose[a, Cycles[{{2, 1}}]]]ArrayExpand[ConjugateTranspose[a, {2, 1}]]ArrayExpand[Transpose[ConjugateTranspose[a]]]ArrayExpand[Conjugate[Conjugate[a]]]ArrayExpand[Conjugate[Transpose[a]]]ArrayExpand[Conjugate[ConjugateTranspose[a]]]ArrayExpand[ConjugateTranspose[Conjugate[a], 7]]ArrayExpand[ConjugateTranspose[Transpose[a, 3], 5]]ArrayExpand[Conjugate[a], Element[a, Arrays[{p, q, r}, Reals]]]ArrayExpand[ConjugateTranspose[a], Element[a, Arrays[{p, q, r}, Reals]]]Simplifications of SymbolicIdentityArray:
ArrayExpand[IdentityMatrix[n]]ArrayExpand[a.SymbolicIdentityArray[{n}]]ArrayExpand[ArrayDot[a, SymbolicIdentityArray[{m, n, k}], 3]]ArrayExpand[MatrixPower[SymbolicIdentityArray[{n}], k], Element[k, Integers]]Simplifications of TensorProduct:
ArrayExpand[TensorProduct[a, b, c, d], Element[a | c, Reals]]ArrayExpand[TensorProduct[a, b, TensorContract[c, {{1, 3}, {2, 5}}], d], Element[a, Vectors[n]] && Element[b, Arrays[{p, q, r}]]]ArrayExpand[TensorProduct[a, b, Transpose[c], d], Element[a, Vectors[n]] && Element[b, Arrays[{p, q, r}]]]ArrayExpand[TensorProduct[a, b, ConjugateTranspose[c, {3, 2, 1}], d], Element[a, Vectors[n]] && Element[b, Arrays[{p, q, r}]]]Simplifications of Cross:
ArrayExpand[v.Cross[v, w]]ArrayExpand[Cross[a, d, c, b]]Simplifications of TensorWedge:
ArrayExpand[TensorWedge[a, b, Transpose[c], d]]ArrayExpand[TensorWedge[a, b, ConjugateTranspose[c, 3 <-> 7], d]]Simplifications of MatrixExp:
ArrayExpand[MatrixExp[MatrixLog[a]]]ArrayExpand[MatrixExp[SymbolicZerosArray[{n, n}]]]Options (2)
Assumptions (1)
Specify assumptions using the assumptions argument:
ArrayExpand[Det[7 a], Element[a, Matrices[{n, n}]]]Use the Assumptions option:
ArrayExpand[Det[7a], Assumptions -> Element[a, Matrices[{n, n}]]]Use Assuming to specify default assumptions:
Assuming[Element[a, Matrices[{n, n}]], ArrayExpand[Det[7a]]]GenerateConditions (1)
With the default setting GenerateConditionsFalse, argument dimensions are quietly assumed to satisfy equations necessary for the expression to be well defined:
u = VectorSymbol["u", k];
v = VectorSymbol["v", m];
w = VectorSymbol["w", n];ArrayExpand[(u + v).w]With GenerateConditionsTrue, the necessary conditions are given explicitly:
ArrayExpand[(u + v).w, GenerateConditions -> True]Properties & Relations (1)
Use NonCommutativeExpand to expand general noncommutative polynomials:
NonCommutativeExpand[(a + 2b)**(3a + 4b)]Specify names for addition and multiplication operations:
alg = NonCommutativeAlgebra[<|"Multiplication" -> mult, "Addition" -> add|>];NonCommutativeExpand[mult[add[a, 2b], add[3a, 4b]], alg]Possible Issues (1)
Related Guides
History
Text
Wolfram Research (2025), ArrayExpand, Wolfram Language function, https://reference.wolfram.com/language/ref/ArrayExpand.html.
CMS
Wolfram Language. 2025. "ArrayExpand." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/ArrayExpand.html.
APA
Wolfram Language. (2025). ArrayExpand. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/ArrayExpand.html
BibTeX
@misc{reference.wolfram_2026_arrayexpand, author="Wolfram Research", title="{ArrayExpand}", year="2025", howpublished="\url{https://reference.wolfram.com/language/ref/ArrayExpand.html}", note=[Accessed: 12-June-2026]}
BibLaTeX
@online{reference.wolfram_2026_arrayexpand, organization={Wolfram Research}, title={ArrayExpand}, year={2025}, url={https://reference.wolfram.com/language/ref/ArrayExpand.html}, note=[Accessed: 12-June-2026]}