Mathematica Asked by xyz on July 30, 2021
In Mathematica the functions like Thread
, Inner
, Outer
etc. are very important and are used frequently.
For the function Thread
:
Thread Usage1:
Thread[f[{a, b, c}]]
{f[a], f[b], f[c]}
Thread Usage2:
Thread[f[{a, b, c}, x]]
{f[a, x], f[b, x], f[c, x]}
Thread Usage3:
Thread[f[{a, b, c}, {x, y, z}]]
{f[a, x], f[b, y], f[c, z]}
And I understand the Usage1
, Usage2
, Usage3
easily as well as I use them masterly.
However I always cannot master the usage of Inner
and Outer
so that I must refer to the Mathematica Documentation every time when I feel I need using them.
I find that I cannot master them owing to that I cannot understand the results of Inner
and Outer
clearly. Namely, I always forget what construct they generate when executed.
The typical usage cases of Inner
and Outer
shown as below:
Inner Usage:
Inner[f, {a, b}, {x, y}, g]
g[f[a, x], f[b, y]]
Inner[f, {{a, b}, {c, d}}, {x, y}, g]
{g[f[a, x], f[b, y]], g[f[c, x], f[d, y]]}
Inner[f, {{a, b}, {c, d}}, {{x, y}, {u, v}}, g]
{{g[f[a, x], f[b, u]], g[f[a, y], f[b, v]]}, {g[f[c, x], f[d, u]], g[f[c, y], f[d, v]]}}
Outer Usage:
Outer[f, {a, b}, {x, y, z}]
{{f[a, x], f[a, y], f[a, z]}, {f[b, x], f[b, y], f[b, z]}}
Outer[f, {{1, 2}, {3, 4}}, {{a, b}, {c, d}}]
{{{{f[1, a], f[1, b]}, {f[1, c], f[1, d]}}, {{f[2, a], f[2, b]}, {f[2, c], f[2, d]}}}, {{{f[3, a], f[3, b]}, {f[3, c], f[3, d]}}, {{f[4, a], f[4, b]}, {f[4, c], f[4, d]}}}}
How to master the usage Inner
and Outer
? Namely, how can I use them without referring to the Mathematica Documentation?
How to understand the result of Out[3]
,Out[4]
,Out[5]
figuratively? Namely, by using graphics or other way.
I think of Outer
just like nikie showed.
Inner
is a generalization of matrix multiplication. I like the picture from the Wikipedia page.
To calculate an entry of matrix multiplication, you first pair list entries (a11,b12) and (a12,b22). You "times/multiply" those pairs (a11*b12) and (a12*b22), and then you "plus/add" all the results (a11*b12)+(a12*b22). Note that you "times" before you "plus" in matrix multiplication which helps me remember the order of arguments for Inner
.
listL={{a11,a12},{a21,a22},{a31,a32},{a41,a42}};
listR={{b11,b12,b13},{b21,b22,b23}};
Inner[times,listL,listR,plus]
Correct answer by Timothy Wofford on July 30, 2021
Not sure if that's what you're looking for: This is the image I always have in mind for Outer[f,{a,b,c},{x,y,z}]
:
args = {{a, b, c}, {x, y, z}};
TableForm[Outer[f, args[[1]], args[[2]]], TableHeadings -> args]
Answered by Niki Estner on July 30, 2021
(i = Inner[List, Range@3, Range@3, List]) // MatrixForm;
(o = Outer[List, Range@3, Range@3]) // MatrixForm
p1 = ListLinePlot[i, Mesh -> All, PlotStyle -> Red, PlotTheme -> "Detailed"];
p2 = ListLinePlot[o, Mesh -> All, PlotStyle -> Blue, PlotTheme -> "Detailed"];
Legended[Show[p2, p1, PlotRange -> All], LineLegend[{Red, Blue}, {"Inner", "Outer"}]]
Answered by eldo on July 30, 2021
Animated Mathematica Functions contains cool animated illustrations of the way a number of built-in functions work. Among them are
See also: cormullion's video
Answered by kglr on July 30, 2021
I think of Outer
like nikie's answer shows. Here's a similar view of Inner
. Think of the arguments in columns. Apply f
to each row and g
to the result.
args = {{a, b, c}, {x, y, z}};
Format[g[e__]] := Column[{g, e},
Dividers -> {None, {False, True, False}}, Alignment -> Center];
Inner[f, Sequence @@ args, g]
Answered by Michael E2 on July 30, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP