provide different view of rectangular Matrix, Vector, or Array
Alias(A, offset, bounds, orient, order, datatype, options)
rectangular storage Matrix, Vector, or Array of any data type and ordering
(optional) integer; offset into data for creation of new rtable
(optional) list of integers or ranges of integers; bounds for the new alias
(optional) orientation of the output Vector alias ('row' or 'column'). This parameter can be specified only if the output is a Vector
(optional) ordering of the output alias ('C_order' or 'Fortran_order')
(optional) hardware datatype of the output alias
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, float, complex, integer, integer, integer, or integer.
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 byte array to a float array will result in a single element float 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 array will result in an integer array with 16 elements, a integer array with 8 elements, a float 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.
Viewing a 10 element Vector as a 2 x 5 Matrix - shown for both orderings
V ≔ Vectorrow⁡10,i→i
Af ≔ Alias⁡V,2,5,Fortran_order
Ac ≔ Alias⁡V,2,5,C_order
Viewing the last 6 elements of a 10 element Vector as a 6 element Array
A6 ≔ Alias⁡V,4,1..6
Viewing a 3 x 4 Matrix as a 12 element row Vector
A ≔ Matrix⁡3,4,i,j→10⁢i+j,order=C_order
V ≔ Alias⁡A,12,row
or as an Array
V ≔ Alias⁡A,1..12
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
Note that the data is shared between the input rtable and its view.
A1,1 ≔ 0:A2,3 ≔ 0:
Obtain a transpose that changes with the original Matrix.
At ≔ Alias⁡A,4,3,Fortran_order
A1,1 ≔ 0:A1,2 ≔ 0:A1,3 ≔ 0:A1,4 ≔ 1:
Another example using the order option. A has the default Fortran order.
A ≔ Matrix⁡4,4,i,j→4⁢j−1+i
B ≔ Array⁡3.14,−2.22,datatype=float8
A ≔ Array⁡1..16,datatype=integer1
Note that convert(..., bytes) gives unsigned integer results that need to be scaled to fit into an integer array. You may also need to reorder the elements to get the correct endianness.
data ≔ convert⁡3.14,bytes
A ≔ Array⁡map⁡x→`if`⁡127<x,x−256,x,data,datatype=integer1
B ≔ ArrayTools:-FlipDimension⁡A,2
The readonly option was introduced in Maple 16.
For more information on Maple 16 changes, see Updates in Maple 16.
Download Help Document