ArrayTools
Alias
provide different view of rectangular Matrix, Vector, or Array
Calling Sequence
Parameters
Options
Description
Thread Safety
Examples
Compatibility
Alias(A, offset, bounds, orient, order, datatype, options)
A
-
rectangular storage Matrix, Vector, or Array of any data type and ordering
offset
(optional) integer; offset into data for creation of new rtable
bounds
(optional) list of integers or ranges of integers; bounds for the new alias
orient
(optional) orientation of the output Vector alias ('row' or 'column'). This parameter can be specified only if the output is a Vector
order
(optional) ordering of the output alias ('C_order' or 'Fortran_order')
datatype
(optional) hardware datatype of the output alias
options
other options
offset = nonnegint
The offset option is a nonnegative integer value that specifies the offset into the input at which the output alias begins. For example, an offset of 4 allows creation of an alias of the last 6 elements of a 10 element Vector as a 6 element Vector.
bounds = integer or list
The bounds option is a list of integers or integer ranges that specify the Matrix, Vector, or Array bounds of the output alias. If bounds is a single integer value, then a Vector alias is returned. If bounds is a list of two integer values, then a Matrix alias is returned. If there are more than two values, or any one of the bounds is specified as a range a..b (where a, b are both integers with a<b), then the output is an Array alias.
In the case where bounds is a single element list with an integer value, the output will be a Vector alias, and the orientation can be set by passing orient with a value of either 'row' or 'column'.
The combination of the new bounds and the offset must not extend past the data storage for the input rtable. If it does, an error is returned.
order = one of C_order or Fortran_order.
The order option describes the order of the output alias. The default value is chosen to be the same order as used for the input rtable.
Note: No underlying data is changed by this operation, so this does not provide an order conversion, but rather a new view on the existing unchanged data. For more information on ordering, see the rtable order help page.
datatype = one of float[8], float[4], complex[8], integer[8], integer[4], integer[2], or integer[1].
The datatype option describes the hardware datatype of the output alias. The default value is the same datatype as the input, A.
Note: No underlying data is changed by this operation, so this does not provide data conversion. Aliasing an 8 element integer[1] byte array to a float[8] array will result in a single element float[8] array with its value given by the hardware byte pattern in the original array. As such the user must be aware of potential endianness issues.
As hinted at above, different datatypes require different numbers of bytes of storage. The specified dimensions designate the input selection area, and the output alias' size will be adjusted accordingly. For example aliasing the first two elements of a complex[8] array will result in an integer[1] array with 16 elements, a integer[2] array with 8 elements, a float[8] array with 2 elements, etc.
readonly = true or false
This option specifies whether the created alias is readonly. If the original rtable is readonly, then specifying this option to be false results in an error.
Important: This option must be explicitly stated when aliasing to an rtable with an indexing function, as the alias will not have the indexing function, so it is possible to corrupt the indexed nature of the original rtable by assigning to an alias created with readonly=false.
The Alias command provides a different view of the same data for an existing Matrix, Vector, or Array. The input Matrix, Vector, or Array must have rectangular (dense) storage.
Alias does not change the underlying data of the input rtable object. Instead, Alias casts it to another rtable object with the same data but a different description that can be specified through options. In contrast to ArrayTools[Reshape], Alias does not create a copy of the underlying data, but instead creates and returns a new rtable object which references the same block of internal data as the input. As such, changes to the contents of the view also affect the contents of the original input rtable, and vice-versa. A limited form of casting to a different data type is also available from ArrayTools[ComplexAsFloat].
Note: If the original rtable has an indexing function, then you must create the alias as readonly. More information on this is provided for the readonly option.
If the original Matrix, Vector, or Array has been unassigned, it will still exist in the attributes of the view, but changing the data will only affect the current view and other views defined on the same rtable.
Important: Use this function with caution. If you remove the table reference from the attributes and unassign the original input object, accessing or changing the data in the view will crash Maple. If a persistent and permanent copy of the data is desired, then use copy, ArrayTools[Copy], or ArrayTools[Reshape] instead.
This function is part of the ArrayTools package, so it can be used in the short form Alias(..) only after executing the command with(ArrayTools). However, it can always be accessed through the long form of the command by using ArrayTools[Alias](..).
The Alias command is thread safe as of Maple 2023, provided that the rtable A is not shared between threads.
For more information on thread safety, see index/threadsafe.
with⁡ArrayTools:
Viewing a 10 element Vector as a 2 x 5 Matrix - shown for both orderings
V≔Vectorrow⁡10,i↦i
V≔12345678910
Af≔Alias⁡V,2,5,Fortran_order
Af≔13579246810
Ac≔Alias⁡V,2,5,C_order
Ac≔12345678910
Viewing the last 6 elements of a 10 element Vector as a 6 element Array
A6≔Alias⁡V,4,1..6
A6≔5678910
type⁡A6,Array
true
Viewing a 3 x 4 Matrix as a 12 element row Vector
A≔Matrix⁡3,4,i,j↦10⋅i+j,order=C_order
A≔111213142122232431323334
V≔Alias⁡A,12,row
V≔111213142122232431323334
op⁡0,V
Vectorrow
or as an Array
V≔Alias⁡A,1..12
Array
The data itself does not move, but specification of different bounds can make it appear to. Conversion of the Matrix A to a 2-D Array with indices starting at zero
Ar≔Alias⁡A,0..2,0..3
A1,1,Ar0,0
11,11
A2,4,Ar1,3
24,24
A3,2,Ar2,1
32,32
Note that the data is shared between the input rtable and its view.
A1,1≔0:A2,3≔0:
V
0121314212202431323334
Obtain a transpose that changes with the original Matrix.
At≔Alias⁡A,4,3,Fortran_order
At≔112131122232132333142434
A·At
63011301630113020302930163029304230
A1,1≔0:A1,2≔0:A1,3≔0:A1,4≔1:
A,At
00012122232431323334,02131022320233312434
1243424203029303429304230
Another example using the order option. A has the default Fortran order.
A≔Matrix⁡4,4,i,j↦4⋅j−4+i
A≔15913261014371115481216
Alias⁡A,C_order
12345678910111213141516
B≔Array⁡3.14,−2.22,datatype=float8
B≔3.14000000000000−2.22000000000000
writebytes⁡alias_test,B
16
fclose⁡alias_test
A≔Array⁡1..16,datatype=integer1
A≔0000000000000000
readbytes⁡alias_test,A
31−123−2181−7230964−61−114092−113−621−64
ArrayTools:-Alias⁡A,float8
3.14000000000000−2.22000000000000
ArrayTools:-Alias⁡A,complex8
3.14000000000000−2.22000000000000⁢I
Note that convert(..., bytes) gives unsigned integer results that need to be scaled to fit into an integer[1] array. You may also need to reorder the elements to get the correct endianness.
data≔convert⁡3.14,bytes
data≔64,9,30,184,81,235,133,31
A≔Array⁡map⁡x↦`if`⁡127<x,x−256,x,data,datatype=integer1
A≔64930−7281−21−12331
B≔ArrayTools:-FlipDimension⁡A,2
B≔31−123−2181−7230964
Alias⁡B,float8
3.14000000000000
The readonly option was introduced in Maple 16.
For more information on Maple 16 changes, see Updates in Maple 16.
See Also
ArrayTools[ComplexAsFloat]
ArrayTools[Reshape]
C_order
Fortran_order
interface
Matrix
Vector
Download Help Document