Go forward to Symbolic Lisp Functions.
Go backward to Computational Lisp Functions.
Go up to Internals.
Vector Functions
................
The functions described here perform various operations on vectors and
matrices.
-- Function: math-concat X Y
Do a vector concatenation; this operation is written `X | Y' in a
symbolic formula. See Building Vectors.
-- Function: vec-length V
Return the length of vector V. If V is not a vector, the result
is zero. If V is a matrix, this returns the number of rows in
the matrix.
-- Function: mat-dimens M
Determine the dimensions of vector or matrix M. If M is not a
vector, the result is an empty list. If M is a plain vector but
not a matrix, the result is a one-element list containing the
length of the vector. If M is a matrix with R rows and C
columns, the result is the list `(R C)'. Higher-order tensors
produce lists of more than two dimensions. Note that the object
`[[1, 2, 3], [4, 5]]' is a vector of vectors not all the same
size, and is treated by this and other Calc routines as a plain
vector of two elements.
-- Function: dimension-error
Abort the current function with a message of "Dimension error."
The Calculator will leave the function being evaluated in
symbolic form; this is really just a special case of
`reject-arg'.
-- Function: build-vector ARGS
Return a Calc vector with the zero-or-more ARGS as elements. For
example, `(build-vector 1 2 3)' returns the Calc vector `[1, 2,
3]', stored internally as the list `(vec 1 2 3)'.
-- Function: make-vec OBJ DIMS
Return a Calc vector or matrix all of whose elements are equal to
OBJ. For example, `(make-vec 27 3 4)' returns a 3x4 matrix
filled with 27's.
-- Function: row-matrix V
If V is a plain vector, convert it into a row matrix, i.e., a
matrix whose single row is V. If V is already a matrix, leave it
alone.
-- Function: col-matrix V
If V is a plain vector, convert it into a column matrix, i.e., a
matrix with each element of V as a separate row. If V is already
a matrix, leave it alone.
-- Function: map-vec F V
Map the Lisp function F over the Calc vector V. For example,
`(map-vec 'math-floor v)' returns a vector of the floored
components of vector V.
-- Function: map-vec-2 F A B
Map the Lisp function F over the two vectors A and B. If A and B
are vectors of equal length, the result is a vector of the
results of calling `(F AI BI)' for each pair of elements AI and
BI. If either A or B is a scalar, it is matched with each value
of the other vector. For example, `(map-vec-2 'math-add v 1)'
returns the vector V with each element increased by one. Note
that using `'+' would not work here, since `defmath' does not
expand function names everywhere, just where they are in the
function position of a Lisp expression.
-- Function: reduce-vec F V
Reduce the function F over the vector V. For example, if V is
`[10, 20, 30, 40]', this calls `(f (f (f 10 20) 30) 40)'. If V
is a matrix, this reduces over the rows of V.
-- Function: reduce-cols F M
Reduce the function F over the columns of matrix M. For example,
if M is `[[1, 2], [3, 4], [5, 6]]', the result is a vector of the
two elements `(f (f 1 3) 5)' and `(f (f 2 4) 6)'.
-- Function: mat-row M N
Return the Nth row of matrix M. This is equivalent to `(elt m
n)'. For a slower but safer version, use `mrow'. (*Note
Extracting Elements::.)
-- Function: mat-col M N
Return the Nth column of matrix M, in the form of a vector. The
arguments are not checked for correctness.
-- Function: mat-less-row M N
Return a copy of matrix M with its Nth row deleted. The number N
must be in range from 1 to the number of rows in M.
-- Function: mat-less-col M N
Return a copy of matrix M with its Nth column deleted.
-- Function: transpose M
Return the transpose of matrix M.
-- Function: flatten-vector V
Flatten nested vector V into a vector of scalars. For example,
if V is `[[1, 2, 3], [4, 5]]' the result is `[1, 2, 3, 4, 5]'.
-- Function: copy-matrix M
If M is a matrix, return a copy of M. This maps `copy-sequence'
over the rows of M; in Lisp terms, each element of the result
matrix will be `eq' to the corresponding element of M, but none
of the `cons' cells that make up the structure of the matrix will
be `eq'. If M is a plain vector, this is the same as
`copy-sequence'.
-- Function: swap-rows M R1 R2
Exchange rows R1 and R2 of matrix M in-place. In other words,
unlike most of the other functions described here, this function
changes M itself rather than building up a new result matrix.
The return value is M, i.e., `(eq (swap-rows m 1 2) m)' is true,
with the side effect of exchanging the first two rows of M.