Skip to content

MapThread ​

f applied across the CORRESPONDING elements of each list, not each list in turn.

✓ checked against that system · ! checked, with disagreements (hover a chip)Wolfram LanguageMapThread✓
MapThread(f, lists){f(a1, b1, …), f(a2, b2, …), …} for lists = {{a1, a2, …}, {b1, b2, …}, …}
Typed signatures
TypePackageApplies
(function: any, lists: list<any>) -> list<any>combinatoricsalways

Domain: Collections

Details
  • Every row of lists must be the same length; a ragged input is left unevaluated.
  • The 3-argument Wolfram form (a level spec) isn't implemented — only the top level threads.

Examples

Basic #
live ↗
InMapThread(f,[[a,b],[c,d]])\mathrm{MapThread}(f, \bigl\lbrack\bigl\lbrack a, b\bigr\rbrack, \bigl\lbrack c, d\bigr\rbrack\bigr\rbrack)Out[f(a,c),f(b,d)]\bigl\lbrack f(a, c), f(b, d)\bigr\rbrack

Pairs up corresponding elements of the lists

live ↗
InMapThread(f,[[a,b,c],[x,y,z]])\mathrm{MapThread}(f, \bigl\lbrack\bigl\lbrack a, b, c\bigr\rbrack, \bigl\lbrack x, y, z\bigr\rbrack\bigr\rbrack)Out[f(a,x),f(b,y),f(c,z)]\bigl\lbrack f(a, x), f(b, y), f(c, z)\bigr\rbrack
Scope #

sums two rows elementwise

live ↗
InMapThread(Add,[[1,2,3],[10,20,30]])\mathrm{MapThread}(\mathrm{Add}, \bigl\lbrack\bigl\lbrack1, 2, 3\bigr\rbrack, \bigl\lbrack10, 20, 30\bigr\rbrack\bigr\rbrack)Out[11,22,33]\bigl\lbrack11, 22, 33\bigr\rbrack

Corresponding elements here are whole pairs, taken at the top level only

live ↗
InMapThread(f,[[[a,b],[c,d]],[[u,v],[w,x]]])\mathrm{MapThread}(f, \bigl\lbrack\bigl\lbrack\bigl\lbrack a, b\bigr\rbrack, \bigl\lbrack c, d\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack u, v\bigr\rbrack, \bigl\lbrack w, x\bigr\rbrack\bigr\rbrack\bigr\rbrack)Out[f([a,b],[u,v]),f([c,d],[w,x])]\bigl\lbrack f(\bigl\lbrack a, b\bigr\rbrack, \bigl\lbrack u, v\bigr\rbrack), f(\bigl\lbrack c, d\bigr\rbrack, \bigl\lbrack w, x\bigr\rbrack)\bigr\rbrack

Any number of lists, so ff takes four arguments

live ↗
InMapThread(f,[[1,2,3],[4,5,6],[7,8,9],[10,11,12]])\mathrm{MapThread}(f, \bigl\lbrack\bigl\lbrack1, 2, 3\bigr\rbrack, \bigl\lbrack4, 5, 6\bigr\rbrack, \bigl\lbrack7, 8, 9\bigr\rbrack, \bigl\lbrack10, 11, 12\bigr\rbrack\bigr\rbrack)Out[f(1,4,7,10),f(2,5,8,11),f(3,6,9,12)]\bigl\lbrack f(1, 4, 7, 10), f(2, 5, 8, 11), f(3, 6, 9, 12)\bigr\rbrack
Applications #
live ↗
InMapThread(()↦_1⁡(_2⁡),[[f,g,h],[x,y,z]])\mathrm{MapThread}(()↦\operatorname{\_1}(\operatorname{\_2}), \bigl\lbrack\bigl\lbrack f, g, h\bigr\rbrack, \bigl\lbrack x, y, z\bigr\rbrack\bigr\rbrack)Out[f(x),g(y),h(z)]\bigl\lbrack f(x), g(y), h(z)\bigr\rbrack
Properties #

With Add, columnwise sums of the rows

live ↗
InMapThread(Add,[[a,b,c],[u,v,w],[x,y,z]])\mathrm{MapThread}(\mathrm{Add}, \bigl\lbrack\bigl\lbrack a, b, c\bigr\rbrack, \bigl\lbrack u, v, w\bigr\rbrack, \bigl\lbrack x, y, z\bigr\rbrack\bigr\rbrack)Out[a+u+x,b+v+y,c+w+z]\bigl\lbrack a+u+x, b+v+y, c+w+z\bigr\rbrack

With List this transposes a rectangular array

live ↗
InMapThread(List,[[a,b,c],[u,v,w],[x,y,z]])\mathrm{MapThread}(\mathrm{List}, \bigl\lbrack\bigl\lbrack a, b, c\bigr\rbrack, \bigl\lbrack u, v, w\bigr\rbrack, \bigl\lbrack x, y, z\bigr\rbrack\bigr\rbrack)Out[[a,u,x],[b,v,y],[c,w,z]]\bigl\lbrack\bigl\lbrack a, u, x\bigr\rbrack, \bigl\lbrack b, v, y\bigr\rbrack, \bigl\lbrack c, w, z\bigr\rbrack\bigr\rbrack

Pairs up functions with variables: ∂xx=1\partial_x x = 1, ∂yxy=x\partial_y xy = x, ∂zxz=x\partial_z xz = x

live ↗
InMapThread(D,[[x,xy,xz],[x,y,z]])\mathrm{MapThread}(D, \bigl\lbrack\bigl\lbrack x, xy, xz\bigr\rbrack, \bigl\lbrack x, y, z\bigr\rbrack\bigr\rbrack)Out[1,x,x]\bigl\lbrack1, x, x\bigr\rbrack

A single list reduces to ordinary mapping

live ↗
InMapThread(f,[[a,b,c]])\mathrm{MapThread}(f, \bigl\lbrack\bigl\lbrack a, b, c\bigr\rbrack\bigr\rbrack)Out[f(a),f(b),f(c)]\bigl\lbrack f(a), f(b), f(c)\bigr\rbrack
Possible issues #

rows of different lengths are left unevaluated

live ↗
InMapThread(f,[[1,2],[3]])\mathrm{MapThread}(f, \bigl\lbrack\bigl\lbrack1, 2\bigr\rbrack, \bigl\lbrack3\bigr\rbrack\bigr\rbrack)OutMapThread(f,[[1,2],[3]])\mathrm{MapThread}(f, \bigl\lbrack\bigl\lbrack1, 2\bigr\rbrack, \bigl\lbrack3\bigr\rbrack\bigr\rbrack)
About
Examples11
Checked againstWolfram Language 11 agree
CrosswalkWolfram Language

See also: MapIndexed, Through