1

I am fairly new to APL and am struggling to multiply each element of a vector v by the vector in such a fashion that it returns an n x n square matrix where n is the length of the vector.

For example,

    v ← 1 0 0 1.

I have attempted to create a function such as:

    ⍳⍴v{⍵×⍵[⍺]}v

    1 4 9 16

I am failing to iterate the ioda through the vector, which is one part I need guidance on. My overall goal is to return a matrix:

v_1 x v --> 1 0 0 1

v_2 x v --> 0 0 0 0

v_3 x v --> 0 0 0 0

v_4 x v --> 1 0 0 1

I will keep trying to figure this out. Any help is appreciated, thanks!

toeknee97
  • 13
  • 2

1 Answers1

0

"Outer product" comes to rescue:

       (⍳10)∘.×⍳10
 1  2  3  4  5  6  7  8  9  10
 2  4  6  8 10 12 14 16 18  20
 3  6  9 12 15 18 21 24 27  30
 4  8 12 16 20 24 28 32 36  40
 5 10 15 20 25 30 35 40 45  50
 6 12 18 24 30 36 42 48 54  60
 7 14 21 28 35 42 49 56 63  70
 8 16 24 32 40 48 56 64 72  80
 9 18 27 36 45 54 63 72 81  90
10 20 30 40 50 60 70 80 90 100

BTW, in case you are trying to learn Dyalog APL, I'd recommend having a look at "Mastering Dyalog APL". And in case you're trying to learn a different dialect, I'd recommend considering to change to Dyalog. (I'm a Dyalog-Fanboy and have made the change myself 20yrs ago. Today Dyalog appears to be practically the only APL-Interpreter that is actively developed and enhanced...)

MBaas
  • 7,248
  • 6
  • 44
  • 61