rtable_scanblock - scan a block of elements in an rtable
|
Calling Sequence
|
|
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)
|
|
Parameters
|
|
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
|
|
|
|
|
Description
|
|
•
|
The rtable_scanblock(A) command applies one or more operations to the values in the specified ranges of an Array, Matrix, or Vector.
|
•
|
The following built-in operations are recognized.
|
Average
|
compute the average value
|
HasNonZero
|
true if there exists a non-zero 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 non-zero entries
|
NonZeroAverage
|
compute the average of the non-zero entries
|
NonZeroMaximum
|
find the maximum excluding zero
|
NonZeroMinimum
|
find the minimum excluding zero
|
Sum
|
compute the sum of all the elements
|
|
|
|
|
|
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 Parameter 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.
|
|
|
Thread Safety
|
|
•
|
The rtable_scanblock command is thread-safe as of Maple 15.
|
|
|
Examples
|
|
Compute the average, maximum, and minimum values in a Matrix.
>
|
|
>
|
|
| (1) |
>
|
|
| (2) |
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;
|
| (3) |
>
|
|
>
|
|
| (4) |
>
|
|
>
|
|
| (5) |
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.
>
|
|
>
|
|
| (6) |
>
|
|
| (7) |
Find the maximum and minimum elements and their corresponding indices in the last row of a Matrix.
>
|
|
>
|
|
| (8) |
>
|
|
| (9) |
|
|