39
$\begingroup$

Description:

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]}}}}

Questions:

  1. How to master the usage Inner and Outer? Namely, how can I use them without referring to the Mathematica Documentation?

  2. How to understand the result of Out[3],Out[4],Out[5] figuratively? Namely, by using graphics or other way.

$\endgroup$
  • 2
    $\begingroup$ I recommend that you download and work through Leonid Shifrin's Mathematica programming: an advanced introduction. It's free and answers a lot of question you ask. $\endgroup$ – m_goldberg Aug 20 '14 at 10:12
  • $\begingroup$ I don't know why you are leaving. All I can say is that I hope you are not taking SE too seriously. It's just a website, a tool to get help and learn from. When you find yourself spending too much time on it, it's good to take a break. I do that from time to time. But don't let it affect you emotionally. $\endgroup$ – Szabolcs Nov 9 '16 at 7:43
  • $\begingroup$ @Szabolcs In fact, I made a mistake and Moderator R.M pointed it out some time ago. And I did affected by M.SE emotionly but I don't know why. $\endgroup$ – xyz Nov 9 '16 at 7:59
25
$\begingroup$

I think of Outer just like nikie showed.

Inner is a generalization of matrix multiplication. I like the picture from the Wikipedia page.

Matrix Multiplication

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]
$\endgroup$
39
$\begingroup$

Animated Mathematica Functions contains cool animated illustrations of the way a number of built-in functions work. Among them are

Thread

enter image description here

Inner:

enter image description here

Outer

enter image description here

See also: cormullion's video

$\endgroup$
  • $\begingroup$ @kguler...I am learning so much this week...nice $\endgroup$ – ubpdqn Aug 20 '14 at 12:52
  • $\begingroup$ Loved them when they first came out; still love them today. $\endgroup$ – J. M. is slightly pensive May 4 '15 at 10:02
  • $\begingroup$ @J. M., same here -- especially the sound effects:) $\endgroup$ – kglr May 4 '15 at 10:10
  • $\begingroup$ @Guesswhoitis., I know you are J.M :) Welcome back! $\endgroup$ – xyz May 5 '15 at 5:24
  • $\begingroup$ @Leandro I am not sure why you are addressing me here. This is kglr's answer, not mine; I only edited it. Also the answer starts with a link to a collection of these animations: reference.wolfram.com/legacy/flash $\endgroup$ – Mr.Wizard Jul 26 '16 at 18:21
20
$\begingroup$

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}]:

enter image description here

args = {{a, b, c}, {x, y, z}};
TableForm[Outer[f, args[[1]], args[[2]]], TableHeadings -> args]
$\endgroup$
8
$\begingroup$
(i = Inner[List, Range@3, Range@3, List]) // MatrixForm;

enter image description here

(o = Outer[List, Range@3, Range@3]) // MatrixForm

enter image description here

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"}]]

enter image description here

$\endgroup$
  • $\begingroup$ like you answer+1 $\endgroup$ – ubpdqn Aug 20 '14 at 12:04
  • $\begingroup$ +1 for the compactness. It might have been even more immediate (specially in the first example) with: (i = Inner[List, {a, b, c}, Range@3, List]) // MatrixForm. $\endgroup$ – Trad Dog Apr 8 '16 at 8:34
7
$\begingroup$

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.

Mathematica graphics

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]
$\endgroup$
  • $\begingroup$ Might I suggest f@@{a,x} etc.? $\endgroup$ – Timothy Wofford Aug 20 '14 at 13:49
  • 1
    $\begingroup$ Thanks. I wanted a divider, but I hate dealing with tables/grids in Mma. I'd thought about f[a, x], too (i.e., no Format-ting). I was trying to emphasize the columns. $\endgroup$ – Michael E2 Aug 20 '14 at 13:52

Your Answer

By clicking "Post Your Answer", you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.