JPhrases/SpecialMatrices

From J Wiki
Jump to: navigation, search

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