5C. Special Matrices & Lists

Although these phrases are intended primarily for numeric matrices, many apply as well to arrays of characters, and to arrays of rank other than 2. For example:

   m3=: 1: j. # ;. _1
   u=: 1 0 0 0 1 1 0 1 
   m3 u
1j3 1 1j1 1

   d4=: m3@[ # ]
   u d4 'abcd'
a   bc d

   u d4 i.4 5
 0  1  2  3  4
 0  0  0  0  0
 0  0  0  0  0
 0  0  0  0  0
 5  6  7  8  9
10 11 12 13 14
 0  0  0  0  0
15 16 17 18 19

   ]cm=: 3 3$'ABCDEFGHI'
ABC
DEF
GHI
   <"2 d5 cm
+--------+
|EF|DF|DE|
|HI|GI|GH|
+--+--+--|
|BC|AC|AB|
|HI|GI|GH|
+--+--+--|
|BC|AC|AB|
|EF|DF|DE|
+--------+

   m42 cm
+-----------+
|ADG|BEH|CFI|
+-----------+

   (>@m42 ; |:) cm                       NB. Open of boxed columns is the transpose
+-------+
|ADG|ADG|
|BEH|BEH|
|CFI|CFI|
+-------+

   (] ; 0&d12 ; _1 0 1&d12) m=: i. 4 4   NB. Band matrices
+-------------------------------+
| 0  1  2  3|0 0  0  0|0 1  0  0|
| 4  5  6  7|0 5  0  0|4 5  6  0|
| 8  9 10 11|0 0 10  0|0 9 10 11|
|12 13 14 15|0 0  0 15|0 0 14 15|
+-------------------------------+

Several equivalent phrases are provided for a number of cases to illustrate various approaches to the same problem. For example, m13 uses self-classification to produce an identity matrix, and m14 uses an equals table. No one solution should be considered to be the "best". If space or time required in execution is of prime concern, then the tools provided in Section 14A (Execution Time and Space) should be used to evaluate the different methods.

d0 =: $,

Reshape as in APL

d1 =: $,:

x copies of y

d2 =: -@[ [\ ]

x-column matrix of the items of y

m3 =: 1: j. # ;. _1

Real 1; Imaginary # of 0's between 1's

d4 =: m3@[ # ]

Expand

d5 =: 1&(|:\.)"2^:2

Minors [5, s.v. 'Outfix'] (e.g. <"2 d5 i. 3 3)

d6 =: <&.>&.>@{@(i.&.>"_)@$ { ]

Minors [4, sect. 3.3]

m7 =: (<0 1)&|:

Diagonal

m8 =: i.@# {"_1 ]

Diagonal

m9 =: =@i.@# #&, ]

Diagonal (tables only)

m10=: <"1@(,"0~)@i.@# { ]

Diagonal

d11=: ir=: i.@#@]

Indices of items of right argument

d12=: [(]*+./@((,@[+"0 1 ir)=/ir))]

Band matrix (1 0 _1 d12 i. 5 5)

m13=: m14@#

Identity matrix of order of # of items of y

m14=: id=: =@i.

Identity matrix of order y

m15=: =/~@i.

"

m16=: ,~ $ {.&1@>:

"

m17=: -@>:@i. {."0 1:

"

m18=: -@i. |."0 1 {.&1

"

m19=: ,&1@($&0)"0@i.

"

m20=: 0&,^:(i.`1:)

" (but not for y=0)

m21=: #:@(2&^)@i.@-

"

m22=: [ D.1@i.

"

m23=:  slt=: >/~@i.

Strict lower triangle

m24=: lt=: >:/~@i.

Lower triangle

m25=: [\@($&1)

"

m26=: +./\@=@i.

"

m27=: >:@i. $"0 1:

"

m28=: >:@i. {."0 1 $&1

"

m29=: i.@-  }."0 1 $&1

"

m30=: 1&,^:(i.`1:)

" (but not for y=0)

m31=: i.@- |.!.0"0 1 $&1

"

m32=: #:@(+/\)@(2&^)@i.@-

"

m33=: ut=: -.@slt

Upper triangle

m34=: +./\"1@=@i.

" but not for y=0

m35=: |.!.0^:(i.`($&1))

" but not for y=0

m36=: -@i. |.!.0"0 1 $&1

"

m37=: #:@(+/\.)@(2&^)@i.@-

"

m38=: [:%. ,~ $ {.&1 _1@>:

"

m39=: ]\ %@(i.&.<:@+:)

Hilbert matrix but not for y=0

a40=: lor=: [^:

1 lor gives left; 0 lor gives right

m41=: -.@('  '&E.) # ]

Remove multiple blanks

m42=: <"1@|:

Box each column of a matrix

m43=: i.@{:@$ <@:({"1)"0 _ ]

"

m44=: [:, (i.@2: ,: #,1:)<@,;.3]

"

d45=: <@|:;.1 |:

Box columns

n46=: 1 0 1 0 0 1 d45 i.3 6

Box columns 0 1, 2 3 4, and 5

v47=: {.;}.

Split first from rest; split y at x

d48=: i.~ ({.;}.@}.) ]

Split y at first x, eliding first x

m49=: }:;{:

Split rest from last

c50=: 2 : 'x.@{. , y.@}.'

f c50 g applies f to first item; g to others

m51=: */~@i.

Multiplication table of order y

m52=: >./~@i.

Maximum table of order y

m53=: ] ]\ ([: <: +:) {. (- {. 1:)

Counterdiagonal matrix of order y

m54=: [: *./@, lt@# >: lnz

Is y lower triangular?

m55=: [: -. 0: e. [: , ]

Is y zero-free?

m56=: lnz=: ] ~: 0:

Locate nonzeros in y

m57=: [: *./@, ut@# >: lnz

Is y upper triangular?

m58=: ~:/~@i.

Nondiagonal matrix of order y

d59=: ;@([ +&.> <@i."0@])

i{x + i. i{y

m60=: -/\@i.

Alternating series length y

m61=: +/\@i.

First y triangular numbers