Skip to content

Outer ​

The generalized outer product: f applied to every pair drawn from two lists.

✓ checked against that system · ! checked, with disagreements (hover a chip)Wolfram LanguageOuter✓
Outer(f, list1, list2)the array (descending to the atoms of nested lists) whose (i,j)(i, j) entry is ff applied to list1list1's ii-th and list2list2's jj-th element.
Typed signatures
TypePackageApplies
(function: any, list<any>, list<any>) -> list<any>combinatoricsalways

Domain: Collections

Details
  • Outer(List,a,b)Outer(List, a, b) is the Cartesian product of aa and bb, each pair wrapped in its own List.

Examples

1 more kept as data, checked against the oracles
Basic #

The outer product of two vectors, a 3×23 \times 2 matrix

live ↗
InOuter(Multiply,[1,2,3],[1,2])\mathrm{Outer}(\mathrm{Multiply}, \bigl\lbrack1, 2, 3\bigr\rbrack, \bigl\lbrack1, 2\bigr\rbrack)Out[[1,2],[2,4],[3,6]]\bigl\lbrack\bigl\lbrack1, 2\bigr\rbrack, \bigl\lbrack2, 4\bigr\rbrack, \bigl\lbrack3, 6\bigr\rbrack\bigr\rbrack

Symbolic entries

live ↗
InOuter(Multiply,[1,2,3],[x,y])\mathrm{Outer}(\mathrm{Multiply}, \bigl\lbrack1, 2, 3\bigr\rbrack, \bigl\lbrack x, y\bigr\rbrack)Out[[x,y],[2x,2y],[3x,3y]]\bigl\lbrack\bigl\lbrack x, y\bigr\rbrack, \bigl\lbrack2x, 2y\bigr\rbrack, \bigl\lbrack3x, 3y\bigr\rbrack\bigr\rbrack

Every pair from the two lists, as a 2×32\times3 table

live ↗
InOuter(f,[a,b],[x,y,z])\mathrm{Outer}(f, \bigl\lbrack a, b\bigr\rbrack, \bigl\lbrack x, y, z\bigr\rbrack)Out[[f(a,x),f(a,y),f(a,z)],[f(b,x),f(b,y),f(b,z)]]\bigl\lbrack\bigl\lbrack f(a, x), f(a, y), f(a, z)\bigr\rbrack, \bigl\lbrack f(b, x), f(b, y), f(b, z)\bigr\rbrack\bigr\rbrack

With Multiply this is the outer product, a multiplication table

live ↗
InOuter(Multiply,[1,2,3,4],[a,b,c])\mathrm{Outer}(\mathrm{Multiply}, \bigl\lbrack1, 2, 3, 4\bigr\rbrack, \bigl\lbrack a, b, c\bigr\rbrack)Out[[a,b,c],[2a,2b,2c],[3a,3b,3c],[4a,4b,4c]]\bigl\lbrack\bigl\lbrack a, b, c\bigr\rbrack, \bigl\lbrack2a, 2b, 2c\bigr\rbrack, \bigl\lbrack3a, 3b, 3c\bigr\rbrack, \bigl\lbrack4a, 4b, 4c\bigr\rbrack\bigr\rbrack
live ↗
InOuter(Multiply,[[1,2],[3,4]],[[a,b],[c,d]])\mathrm{Outer}(\mathrm{Multiply}, \bigl\lbrack\bigl\lbrack1, 2\bigr\rbrack, \bigl\lbrack3, 4\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack a, b\bigr\rbrack, \bigl\lbrack c, d\bigr\rbrack\bigr\rbrack)Out[[[[a,b],[c,d]],[[2a,2b],[2c,2d]]],[[[3a,3b],[3c,3d]],[[4a,4b],[4c,4d]]]]\bigl\lbrack\bigl\lbrack\bigl\lbrack\bigl\lbrack a, b\bigr\rbrack, \bigl\lbrack c, d\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack2a, 2b\bigr\rbrack, \bigl\lbrack2c, 2d\bigr\rbrack\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack3a, 3b\bigr\rbrack, \bigl\lbrack3c, 3d\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack4a, 4b\bigr\rbrack, \bigl\lbrack4c, 4d\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack
Scope #

Any binary function: an addition table

live ↗
InOuter(Add,[1,2],[10,20])\mathrm{Outer}(\mathrm{Add}, \bigl\lbrack1, 2\bigr\rbrack, \bigl\lbrack10, 20\bigr\rbrack)Out[[11,21],[12,22]]\bigl\lbrack\bigl\lbrack11, 21\bigr\rbrack, \bigl\lbrack12, 22\bigr\rbrack\bigr\rbrack

A table of powers

live ↗
InOuter(Power,[2,3],[1,2,3])\mathrm{Outer}(\mathrm{Power}, \bigl\lbrack2, 3\bigr\rbrack, \bigl\lbrack1, 2, 3\bigr\rbrack)Out[[2,4,8],[3,9,27]]\bigl\lbrack\bigl\lbrack2, 4, 8\bigr\rbrack, \bigl\lbrack3, 9, 27\bigr\rbrack\bigr\rbrack

ListList gives every pair, like a Cartesian product

live ↗
InOuter(List,[a,b],[x,y])\mathrm{Outer}(\mathrm{List}, \bigl\lbrack a, b\bigr\rbrack, \bigl\lbrack x, y\bigr\rbrack)Out[[[a,x],[a,y]],[[b,x],[b,y]]]\bigl\lbrack\bigl\lbrack\bigl\lbrack a, x\bigr\rbrack, \bigl\lbrack a, y\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack b, x\bigr\rbrack, \bigl\lbrack b, y\bigr\rbrack\bigr\rbrack\bigr\rbrack
live ↗
InOuter(Multiply,s1,s2)\mathrm{Outer}(\mathrm{Multiply}, \mathrm{s1}, \mathrm{s2})OutOuter(Multiply,s1,s2)\mathrm{Outer}(\mathrm{Multiply}, \mathrm{s1}, \mathrm{s2})
live ↗
InOuter(Multiply,[[1,2],[3,4]],[[a,b,c],[d,k]])\mathrm{Outer}(\mathrm{Multiply}, \bigl\lbrack\bigl\lbrack1, 2\bigr\rbrack, \bigl\lbrack3, 4\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack a, b, c\bigr\rbrack, \bigl\lbrack d, k\bigr\rbrack\bigr\rbrack)Out[[[[a,b,c],[d,k]],[[2a,2b,2c],[2d,2k]]],[[[3a,3b,3c],[3d,3k]],[[4a,4b,4c],[4d,4k]]]]\bigl\lbrack\bigl\lbrack\bigl\lbrack\bigl\lbrack a, b, c\bigr\rbrack, \bigl\lbrack d, k\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack2a, 2b, 2c\bigr\rbrack, \bigl\lbrack2d, 2k\bigr\rbrack\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack3a, 3b, 3c\bigr\rbrack, \bigl\lbrack3d, 3k\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack4a, 4b, 4c\bigr\rbrack, \bigl\lbrack4d, 4k\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack
Properties #

The shape comes from the list lengths, even when all entries are equal

live ↗
InOuter(f,[x,x,x],[x,x,x,x])\mathrm{Outer}(f, \bigl\lbrack x, x, x\bigr\rbrack, \bigl\lbrack x, x, x, x\bigr\rbrack)Out[[f(x,x),f(x,x),f(x,x),f(x,x)],[f(x,x),f(x,x),f(x,x),f(x,x)],[f(x,x),f(x,x),f(x,x),f(x,x)]]\bigl\lbrack\bigl\lbrack f(x, x), f(x, x), f(x, x), f(x, x)\bigr\rbrack, \bigl\lbrack f(x, x), f(x, x), f(x, x), f(x, x)\bigr\rbrack, \bigl\lbrack f(x, x), f(x, x), f(x, x), f(x, x)\bigr\rbrack\bigr\rbrack

With List, every pairing is listed, nested by first list

live ↗
InOuter(List,[a,b,c],[x,y])\mathrm{Outer}(\mathrm{List}, \bigl\lbrack a, b, c\bigr\rbrack, \bigl\lbrack x, y\bigr\rbrack)Out[[[a,x],[a,y]],[[b,x],[b,y]],[[c,x],[c,y]]]\bigl\lbrack\bigl\lbrack\bigl\lbrack a, x\bigr\rbrack, \bigl\lbrack a, y\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack b, x\bigr\rbrack, \bigl\lbrack b, y\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack c, x\bigr\rbrack, \bigl\lbrack c, y\bigr\rbrack\bigr\rbrack\bigr\rbrack
live ↗
InOuter(f,l1,l2)\mathrm{Outer}(f, \mathrm{l1}, \mathrm{l2})OutOuter(f,l1,l2)\mathrm{Outer}(f, \mathrm{l1}, \mathrm{l2})
Possible issues #
live ↗
InOuter(f,s1,s2)\mathrm{Outer}(f, \mathrm{s1}, \mathrm{s2})OutOuter(f,s1,s2)\mathrm{Outer}(f, \mathrm{s1}, \mathrm{s2})
About
Examples15
Checked againstWolfram Language 15 agree
CrosswalkWolfram Language