Matrices, Rows and Columns

In a language like "C", and array can be initialized as {0, 1, 2, 3, 4, 5, 6, ..., 119}, and then passed to a procedure, where its dimensions could be defined to be any one of:

• one_dimensional [120];
• two_dimensional_1 [10] [12];
• two_dimensional_2 [12] [10];
• three_dimensional_1 [5] [4] [6];
• three_dimensional_2 [6] [5] [4];
• three_dimensional_3 [4] [5] [6];
• five_dimensional [2] [2] [2] [3] [5];

and many other possibilities.

In its rendition as "two_dimensional_1", the array would look like:

 a [0,0]=0 a [0,1]=1 a [0,2]=2 a [0,3]=3 a [0,4]=4 a [0,5]=5 a [0,6]=6 a [0,7]=7 a [0,8]=8 a [0,9]=9 a [0,10]=10 a [0,11]=11 a [1,0]=12 a [1,1]=13 a [1,2]=14 a [1,3]=15 a [1,4]=16 a [1,5]=17 a [1,6]=18 a [1,7]=19 a [1,8]=20 a [1,9]=21 a [1,10]=22 a [1,11]=23 a [2,0]=24 a [2,1]=25 a [2,2]=26 a [2,3]=27 a [2,4]=28 a [2,5]=29 a [2,6]=30 a [2,7]=31 a [2,8]=32 a [2,9]=33 a [2,10]=34 a [2,11]=35 a [3,0]=36 a [3,1]=37 a [3,2]=38 a [3,3]=39 a [3,4]=40 a [3,5]=41 a [3,6]=42 a [3,7]=43 a [3,8]=44 a [3,9]=45 a [3,10]=46 a [3,11]=47 a [4,0]=48 a [4,1]=49 a [4,2]=50 a [4,3]=51 a [4,4]=52 a [4,5]=53 a [4,6]=54 a [4,7]=55 a [4,8]=56 a [4,9]=57 a [4,10]=58 a [4,11]=59 a [5,0]=60 a [5,1]=61 a [5,2]=62 a [5,3]=63 a [5,4]=64 a [5,5]=65 a [5,6]=66 a [5,7]=67 a [5,8]=68 a [5,9]=69 a [5,10]=70 a [5,11]=71 a [6,0]=72 a [6,1]=73 a [6,2]=74 a [6,3]=75 a [6,4]=76 a [6,5]=77 a [6,6]=78 a [6,7]=79 a [6,8]=80 a [6,9]=81 a [6,10]=82 a [6,11]=83 a [7,0]=84 a [7,1]=85 a [7,2]=86 a [7,3]=87 a [7,4]=88 a [7,5]=89 a [7,6]=90 a [7,7]=91 a [7,8]=92 a [7,9]=93 a [7,10]=94 a [7,11]=95 a [8,0]=96 a [8,1]=97 a [8,2]=98 a [8,3]=99 a [8,4]=100 a [8,5]=101 a [8,6]=102 a [8,7]=103 a [8,8]=104 a [8,9]=105 a [8,10]=106 a [8,11]=107 a [9,0]=108 a [9,1]=109 a [9,2]=110 a [9,3]=111 a [9,4]=112 a [9,5]=113 a [9,6]=114 a [9,7]=115 a [9,8]=116 a [9,9]=117 a [9,10]=118 a [9,11]=119

In its rendition as "two_dimensional_1", the array would look like:

 a [0,0]=0 a [0,1]=1 a [0,2]=2 a [0,3]=3 a [0,4]=4 a [0,5]=5 a [0,6]=6 a [0,7]=7 a [0,8]=8 a [0,9]=9 a [1,0]=10 a [1,1]=11 a [1,2]=12 a [1,3]=13 a [1,4]=14 a [1,5]=15 a [1,6]=16 a [1,7]=17 a [1,8]=18 a [1,9]=19 a [2,0]=20 a [2,1]=21 a [2,2]=22 a [2,3]=23 a [2,4]=24 a [2,5]=25 a [2,6]=26 a [2,7]=27 a [2,8]=28 a [2,9]=29 a [3,0]=30 a [3,1]=31 a [3,2]=32 a [3,3]=33 a [3,4]=34 a [3,5]=35 a [3,6]=36 a [3,7]=37 a [3,8]=38 a [3,9]=39 a [4,0]=40 a [4,1]=41 a [4,2]=42 a [4,3]=43 a [4,4]=44 a [4,5]=45 a [4,6]=46 a [4,7]=47 a [4,8]=48 a [4,9]=49 a [5,0]=50 a [5,1]=51 a [5,2]=52 a [5,3]=53 a [5,4]=54 a [5,5]=55 a [5,6]=56 a [5,7]=57 a [5,8]=58 a [5,9]=59 a [6,0]=60 a [6,1]=61 a [6,2]=62 a [6,3]=63 a [6,4]=64 a [6,5]=65 a [6,6]=66 a [6,7]=67 a [6,8]=68 a [6,9]=69 a [7,0]=70 a [7,1]=71 a [7,2]=72 a [7,3]=73 a [7,4]=74 a [7,5]=75 a [7,6]=76 a [7,7]=77 a [7,8]=78 a [7,9]=79 a [8,0]=80 a [8,1]=81 a [8,2]=82 a [8,3]=83 a [8,4]=84 a [8,5]=85 a [8,6]=86 a [8,7]=87 a [8,8]=88 a [8,9]=89 a [9,0]=90 a [9,1]=91 a [9,2]=92 a [9,3]=93 a [9,4]=94 a [9,5]=95 a [9,6]=96 a [9,7]=97 a [9,8]=98 a [9,9]=99 a [10,0]=100 a [10,1]=101 a [10,2]=102 a [10,3]=103 a [10,4]=104 a [10,5]=105 a [10,6]=106 a [10,7]=107 a [10,8]=108 a [10,9]=109 a [11,0]=110 a [11,1]=111 a [11,2]=112 a [11,3]=113 a [11,4]=114 a [11,5]=115 a [11,6]=116 a [11,7]=117 a [11,8]=118 a [11,9]=119

In a language like M[UMPS] arrays are not pre-allocated, nor is there a predefined notion that makes a specific subscript correspond to "rows" or "columns". Since it is attractive to write code like:
Set one="" For  Set one=\$Order(array(one)) Quit:one=""  Do
. Write !
. Set two="" For  Set two=\$Order(array(two)) Quit:two=""  Do
. . ;
etcetera
many people will consider the first subscript in a two-dimensional array to be the "row" subscript and the second one the "column" subscript.

However, there is nothing that prohibits a programmer from creating an array with elements like:
Set A(1,1)=11,A(1,2)=12,A(1,3)=13
Set A(2,1)=21,A(2,2)=22,A(2,3)=23

and then using the data in this array in either of the following ways:
For y=1:1:2 Write ! For x=1:1:3 Write \$Justify(A(y,x),6)
which would lead to:
11    12    13
21    22    23

which looks like two rows of three columns, whereas:
For x=1:1:3 Write ! For y=1:1:2 Write \$Justify(A(x,y),6)
which would lead to:
11    21
12    22
13    23

which looks like three rows of two columns.

In M[UMPS] the assignment of subscripts to notions like rows and columns is up to the author of the application. However, for the purpose of the standardized functions for matrix manipulation, a choice has been pre-made to use the first subscript for rows and the second one for columns.

Be aware, though, that it is possible to define an array like:

 a [0,0]=0 a [0,3]=3 a [0,4]=4 a [0,6]=6 a [0,9]=9 a [1,0]=10 a [1,2]=12 a [1,3]=13 a [1,5]=15 a [1,9]=19 a [2,0]=20 a [2,1]=21 a [2,2]=22 a [2,3]=23 a [2,4]=24 a [2,5]=25 a [2,7]=27 a [2,8]=28 a [2,9]=29 a [3,0]=30 a [3,1]=31 a [3,3]=33 a [3,4]=34 a [3,5]=35 a [3,6]=36 a [3,8]=38 a [3,9]=39 a [4,0]=40 a [4,1]=41 a [4,2]=42 a [4,3]=43 a [4,4]=44 a [4,5]=45 a [4,6]=46 a [4,7]=47 a [4,8]=48 a [5,0]=50 a [5,1]=51 a [5,3]=53 a [5,4]=54 a [5,5]=55 a [5,7]=57 a [5,8]=58 a [5,9]=59 a [6,1]=61 a [6,2]=62 a [6,3]=63 a [6,4]=64 a [6,6]=66 a [6,8]=68 a [6,9]=69 a [7,0]=70 a [7,1]=71 a [7,2]=72 a [7,3]=73 a [7,4]=74 a [7,5]=75 a [7,6]=76 a [7,7]=77 a [7,9]=79 a [8,0]=80 a [8,2]=82 a [8,3]=83 a [8,6]=86 a [8,8]=88 a [8,9]=89 a [9,0]=90 a [9,1]=91 a [9,2]=92 a [9,3]=93 a [9,5]=95 a [9,7]=97 a [9,8]=98 a [9,9]=99

When used in a function call like:
only the part of the matrix that is highlighted below would be used.

 a [0,0]=0 a [0,3]=3 a [0,4]=4 a [0,6]=6 a [0,9]=9 a [1,0]=10 a [1,2]=12 a [1,3]=13 a [1,5]=15 a [1,9]=19 a [2,0]=20 a [2,1]=21 a [2,2]=22 a [2,3]=23 a [2,4]=24 a [2,5]=25 a [2,7]=27 a [2,8]=28 a [2,9]=29 a [3,0]=30 a [3,1]=31 a [3,3]=33 a [3,4]=34 a [3,5]=35 a [3,6]=36 a [3,8]=38 a [3,9]=39 a [4,0]=40 a [4,1]=41 a [4,2]=42 a [4,3]=43 a [4,4]=44 a [4,5]=45 a [4,6]=46 a [4,7]=47 a [4,8]=48 a [5,0]=50 a [5,1]=51 a [5,3]=53 a [5,4]=54 a [5,5]=55 a [5,7]=57 a [5,8]=58 a [5,9]=59 a [6,1]=61 a [6,2]=62 a [6,3]=63 a [6,4]=64 a [6,6]=66 a [6,8]=68 a [6,9]=69 a [7,0]=70 a [7,1]=71 a [7,2]=72 a [7,3]=73 a [7,4]=74 a [7,5]=75 a [7,6]=76 a [7,7]=77 a [7,9]=79 a [8,0]=80 a [8,2]=82 a [8,3]=83 a [8,6]=86 a [8,8]=88 a [8,9]=89 a [9,0]=90 a [9,1]=91 a [9,2]=92 a [9,3]=93 a [9,5]=95 a [9,7]=97 a [9,8]=98 a [9,9]=99

When used in a function call like:
only the part of the matrix that is highlighted below would be used.

 a [0,0]=0 a [0,3]=3 a [0,4]=4 a [0,6]=6 a [0,9]=9 a [1,0]=10 a [1,2]=12 a [1,3]=13 a [1,5]=15 a [1,9]=19 a [2,0]=20 a [2,1]=21 a [2,2]=22 a [2,3]=23 a [2,4]=24 a [2,5]=25 a [2,7]=27 a [2,8]=28 a [2,9]=29 a [3,0]=30 a [3,1]=31 a [3,3]=33 a [3,4]=34 a [3,5]=35 a [3,6]=36 a [3,8]=38 a [3,9]=39 a [4,0]=40 a [4,1]=41 a [4,2]=42 a [4,3]=43 a [4,4]=44 a [4,5]=45 a [4,6]=46 a [4,7]=47 a [4,8]=48 a [5,0]=50 a [5,1]=51 a [5,3]=53 a [5,4]=54 a [5,5]=55 a [5,7]=57 a [5,8]=58 a [5,9]=59 a [6,1]=61 a [6,2]=62 a [6,3]=63 a [6,4]=64 a [6,6]=66 a [6,8]=68 a [6,9]=69 a [7,0]=70 a [7,1]=71 a [7,2]=72 a [7,3]=73 a [7,4]=74 a [7,5]=75 a [7,6]=76 a [7,7]=77 a [7,9]=79 a [8,0]=80 a [8,2]=82 a [8,3]=83 a [8,6]=86 a [8,8]=88 a [8,9]=89 a [9,0]=90 a [9,1]=91 a [9,2]=92 a [9,3]=93 a [9,5]=95 a [9,7]=97 a [9,8]=98 a [9,9]=99

Copyright © Standard Documents; 1977-2018 MUMPS Development Committee;
Copyright © Examples: 1995-2018 Ed de Moel;
Copyright © Annotations: 2003-2008 Jacquard Systems Research
Copyright © Annotations: 2008-2018 Ed de Moel.

Some specifications are "approved for inclusion in a future standard". Note that the MUMPS Development Committee cannot guarantee that such future standards will indeed be published.

This page most recently updated on 13-Sep-2014, 17:04:44 .

For comments, contact Ed de Moel (demoel@jacquardsystems.com)