In JSL, use the subscript operator ([ ]) to pick out elements or submatrices from matrices. The Subscript() function is usually written as a bracket notation after the matrix to be subscripted, with arguments for rows and columns.
The expression A[i,j] extracts the element in row i, column j, returning a scalar number. The equivalent functional form is Subscript(A,i,j).
P = [1 2 3, 4 5 6, 7 8 9];
P[2, 3]; // returns 6
Subscript( P, 2, 3 ); // returns 6
Assign the value that is in the third row and the first column in the matrix A (which is 5) to the variable test.
A = [1 2, 3 4, 5 6];
test = A[3, 1];
Show( test );
test = 5;
To extract a sub-matrix, use matrix or list subscripts. The result is a matrix of the selected rows and columns. The following expressions select the second and third rows with the first and third columns.
P = [1 2 3, 4 5 6, 7 8 9];
P[[2 3],[1 3]]; // matrix subscripts
P[{2, 3},{1, 3}]; // list subscripts
Both of these methods provide the following output:
[4 6,
7 9]
A single subscript addresses matrices as if all the rows were connected end-to-end in a single row. This makes the double subscript A[i,j] the same as the single subscript A[(i-1)*ncol(A)+j].
Q = [2 4 6, 8 10 12, 14 16 18];
Q[8]; // same as Q[3,2]
16
The following examples all return the column vector [10, 14, 18]:
Q = [2 4 6, 8 10 12, 14 16 18];
Q[{5, 7, 9}];
Q[[5 7 9]];
ii = [5 7 9];
Q[ii];
ii = {5, 7, 9};
Q[ii];
Subscript( Q, ii );
This script returns the values 1 through 9 from the matrix P in order:
P = [1 2 3, 4 5 6, 7 8 9];
For( i = 1, i <= 3, i++,
For( j = 1, j <= 3, j++,
Show( P[i, j] )
)
);
Deleting rows and columns is accomplished by assigning an empty matrix to that row or column.
A[k, 0] = []; // deletes the kth row
A[0, k] = []; // deletes the kth column
A subscript argument of zero selects all rows or columns.
P = [1 2 3, 4 5 6, 7 8 9];
Select column 2:
P[0, 2];
[2, 5, 8]
Select columns 3 and 2:
P[0, [3, 2]];
[3 2, 6 5, 9 8]
Select row 3:
P[3, 0];
[7 8 9]
Select rows 2 and 3:
P[[2, 3], 0];
[4 5 6, 7 8 9]
Select all columns and rows (the whole matrix):
P[0, 0];
[1 2 3, 4 5 6, 7 8 9]
You can change values in matrices using subscripts. The subscripts can be single indices, matrices or lists of indices, or the zero index representing all rows or columns. The number of selected rows and columns for the insertion must either match the dimension of the inserted argument, or the argument can be inserted repeatedly into the indexed positions.
Change the value in row 2, column 3 to 99:
P = [1 2 3, 4 5 6, 7 8 9];
P[2, 3] = 99;
Show( P );
P=[1 2 3, 4 5 99, 7 8 9]
Change the values in four locations:
P = [1 2 3, 4 5 6, 7 8 9];
P[[1 2], [2 3]] = [66 77, 88 99];
Show( P );
P=[1 66 77, 4 88 99, 7 8 9]
Change three values in one column:
P = [1 2 3, 4 5 6, 7 8 9];
P[0, 2] = [11, 22, 33];
Show( P );
P=[1 11 3, 4 22 6, 7 33 9]
Change three values in one row:
P = [1 2 3, 4 5 6, 7 8 9];
P[3, 0] = [100 102 104];
Show( P );
P=[1 2 3, 4 5 6, 100 102 104]
Change all the values in one row to the same value:
P = [1 2 3, 4 5 6, 7 8 9];
P[2, 0] = 99;
Show( P );
P=[1 2 3, 99 99 99, 7 8 9]
You can use operator assignments (such as +=) on matrices or subscripts of matrices. For example, the following statement adds 1 to the i - jth element of the matrix:
P = [1 2 3, 4 5 6, 7 8 9];
P[1, 1] += 1;
Show( P );
P=[2 2 3,
4 5 6,
7 8 9];
P[1, 1] += 1;
Show( P );
P=[3 2 3,
4 5 6,7 8 9];
If you are working with a range of subscripts, use the Index() function or :: to create matrices of ranges.
T1 = 1 :: 3; // create the vector [1 2 3]
T2 = 4 :: 6; // create the vector [4 5 6]
T3 = 7 :: 9; // create the vector [7 8 9]
T = T1 |/ T2 |/ T3; // concatenate the vectors into a single matrix
T[1 :: 3, 2 :: 3]; // refer to rows 1 through 3, columns 2 and 3
[2 3, 5 6, 8 9]
T[Index( 1, 3 ), Index( 2, 3 )]; // equivalent Index function
[2 3, 5 6, 8 9]