rtable_scanblock
scan a block of elements in an rtable
Calling Sequence
Parameters
Description
Thread Safety
Examples
Compatibility
rtable_scanblock(A, ranges, operation)
rtable_scanblock(A, ranges, noindex, operation1, data1, stopresult=val1, passindex, operation2, ... )
operation_passindex(value, index, data)
operation_noindex(value, data)
A
-
rtable object
ranges
empty list or list of ranges
operation*
name of a builtin operation or a proc
val*
(optional) stop scanning when the operation proc returns this
noindex
(optional) do not pass the index to the operation proc
passindex
(optional) pass the index to the operation proc
value
value at the current element in A
index
index of the current element entry in A
data
val1, or value of the previous result
operation_passindex
calling sequence for the operation parameter when passindex is given
operation_passnoindex
calling sequence for the operation parameter when noindex is given
The rtable_scanblock(A) command applies one or more operations to the values in the specified ranges of an Array, Matrix, or Vector.
If ranges is an empty list all elements of A will be scanned. Otherwise, the given list of ranges must be fully specified with integer lower and upper bounds, and fall within the index-space of A. Note that for an integer n, the range n..n can be written as simply n.
The following built-in operations are recognized.
Average
compute the average value
HasNonZero
true if there exists a nonzero value
HasZero
true if there exists a zero value
Maximum
find the maximum defined value
MaximumCheckUndefined
find the maximum value or undefined if present
Minimum
find the minimum defined value
MinimumCheckUndefined
find the minimum value or undefined if present
NumericMaxMin
find the max and min of only the numeric entries
NonZeros
count the number of nonzero entries
NonZeroAverage
compute the average of the nonzero entries
NonZeroMaximum
find the maximum excluding zero
NonZeroMinimum
find the minimum excluding zero
Sum
compute the sum of all the elements
Zeros
count the number of zero entries
Most of these built-in operations work only on numeric data. A value of FAIL is returned if the operation cannot be completed.
The operation parameter can be a procedure that accepts either the calling sequence given by operation_passindex or by operation_noindex listed in the Calling Sequence section. If the option noindex is specified in the calling sequence, then every operation following is assumed to have the form of the operation_noindex calling sequence. In other words, the elements index is not passed to those operation procedures. This may be more efficient as creation of the index expression sequence can sometimes be avoided. When passindex is specified, then the subsequent operation parameters are called with the index of the element in addition to the element's value.
The data parameter to the operation callbacks is initially the valN value passed to rtable_scanblock. After the first callback, data becomes the result of the last callback. This is useful for building a result that depends on previous scanned elements.
It is often desirable to stop scanning once certain information is known about an element. For example, upon detection of the first non-numeric type you may want to interrupt the scan. This can be done using the stopresult parameter. If the operation procedure returns the value given by stopresult, then the block scan is terminated and that result is returned. Only the operation paired with its stopresult is terminated. If other operations specified in the rtable_scanblock calling sequence are not finished, they will continue.
The rtable_scanblock command is thread-safe as of Maple 15.
For more information on thread safety, see index/threadsafe.
Compute the average, maximum, and minimum values in a Matrix.
N≔100:
A≔LinearAlgebra:-RandomMatrix⁡N,N,outputoptions=datatype=float
rtable_scanblock⁡A,rtable_dims⁡A,Average,Maximum,Minimum
0.292500000000000,99.,−99.
Check if a Vector has a value bigger than 0.
gzero := proc(val,res) if val > 0 then return true; else return false; end if; end proc;
gzero ≔ procval,resif0<valthenreturntrueelsereturnfalseend ifend proc
A≔Vector⁡−1,0,1:
rtable_scanblock⁡A,,noindex,gzero,stopresult=true
true
B≔Vector⁡−1,0,−2:
rtable_scanblock⁡B,,noindex,gzero,stopresult=true
false
Find the maximum element and its index in the first column of a Matrix. Note [[1,1],A[1,1]] is used as the initial max value.
rtable_scanblock⁡A,1..N,1..1,val,ind,res↦`if`⁡res2<val,ind,val,res,1,1,A1,1
94,1,99.
Find the maximum and minimum elements and their corresponding indices in the last row of a Matrix.
rtable_scanblock⁡A,N..N,1..N,val,ind,res↦`if`⁡res2<val,ind,val,res,1,1,A1,1,val,ind,res↦`if`⁡val<res2,ind,val,res,1,1,A1,1
100,4,96.,100,12,−95.
The rtable_scanblock command was updated in Maple 2020.
See Also
Array
for
Matrix
rtable
rtable_dims
seq
Vector
Download Help Document