copy portion of Matrix, Vector, or Array to another - Maple Help

Online Help

All Products    Maple    MapleSim


Home : Support : Online Help : Programming : Low-level Manipulation : Matrices, Vectors, and Arrays : ArrayTools : ArrayTools/Copy

ArrayTools[Copy] - copy portion of Matrix, Vector, or Array to another

Calling Sequence

Copy(num, A, offsetA, skipA, B, offsetB, skipB)

Parameters

num

-

(optional); number of elements to copy

A

-

source; rectangular storage Matrix, Vector, or Array of any data type and ordering

offsetA

-

(optional); offset for source

skipA

-

(optional); increment for source. Can be specified only if offsetA is specified

B

-

target; rectangular storage Matrix, Vector, or Array of matching data type and any ordering

offsetB

-

(optional); offset for target

skipB

-

(optional); increment for target. Can be specified only if offsetB is specified

Description

• 

The Copy command copies data from an existing Matrix, Vector, or Array (source) to another Matrix, Vector, or Array (target). The data types of the source and target must match, or an error results. In addition, the source and target must both have rectangular (dense) storage.

• 

The additional parameters, num, offsetA, skipA, offsetB, and skipB extend Copy command usage. For example, you can copy of part of a Matrix to a smaller Matrix, copy one row of a Matrix to a column of another, or copy data from an nxm Matrix to a nm entry Vector.

  

The use of these additional parameters is a programmer level feature, and requires detailed knowledge of the storage structure of multi-dimensional rtables under different data orderings (C_order and Fortran_order).  For a description of storage under these orderings, see Fortran_order.

• 

Knowledge of these storage schemes becomes required when you want to compute the num, offsetA, skipA, offsetB, and skipB values to copy part of the data from one Matrix to another.

• 

The default values of the parameters are described as follows.

  

- offsetA and offsetB are 0 (start at the beginning)

  

- skipA and skipB are 1 (fill all consecutive elements)

  

- num is chosen so that the operation does not exceed the storage of the rtable

  

As an example, copying data from the third column of a nxm C_order Matrix A corresponds to accessing the elements i1m+31 for i=1..n. If you want to copy the entire column, num, the number of elements to copy would be n, the source offset offsetA would be 3-1=2, and skipA is the distance between consecutive elements (the multiplier of the i above) which is m. If you were to copy this column to a n element row Vector B, you would not need to compute offsetB and skipB, as the default values would do. The command to accomplish this would then be Copy(n,A,2,m,B) (where n,m are fixed values corresponding to the problem).

  

In contrast, the same operation for a nxm Fortran_order Matrix corresponds to accessing the elements i1+31n for i=1..n. It is easy to see that in this case the command would be Copy(n,A,2*n,1,B) (where again n,m are fixed values).

  

Note: The calling sequences above can be abbreviated, as num=n is the largest value of num that can be used without exceeding the bounds of the target Vector. For the second calling sequence, the skipA value of 1 is redundant, as 1 is the default value, so you could use the equivalent calling sequences Copy(A,2,m,B) and Copy(A,2*n,B) respectively. This is shown in the following examples.

• 

This function is part of the ArrayTools package, so it can be used in the short form Copy(..) only after executing the command with(ArrayTools).  However, it can always be accessed through the long form of the command by using ArrayTools[Copy](..).

Examples

withArrayTools:

Vector to Vector

A:=LinearAlgebra:-RandomVectorrow10,generator=100..100,outputoptions=datatype=integer

A:=9993168795125267050

(1)

B:=Vectorrow10,datatype=integer

B:=0000000000

(2)

Direct copy from A to B

CopyA,B

B

9993168795125267050

(3)

Clear B and copy first 5 elements of A to B.

Fill0,B

Copy5,A,B

B

99931687900000

(4)

Clear B and copy every second element of A to first 5 elements of B.

Fill0,B

Copy5,A,0,2,B

B

93179257000000

(5)

Copying part of a C_order Matrix to a Vector

A:=LinearAlgebra:-RandomMatrix4,5,generator=100..100,outputoptions=datatype=integer,order=C_order

A:=53808169157597165345513733387731992893

(6)

B:=Vectorrow5,datatype=integer

B:=00000

(7)

Copy first row of A to B.

CopyA,B

B

538081691

(8)

Copy fourth row of A to B.

CopyA,415,B

B

731992893

(9)

Copy third column of A to C.

C:=Vectorrow4,datatype=integer:

CopyA,31,5,C

C,A1..4,3

81717392,81717392

(10)

Copying part of a Fortran_order Matrix to a Vector

A:=LinearAlgebra:-RandomMatrix4,5,generator=100..100,outputoptions=datatype=integer,order=Fortran_order

A:=41222141235356308036979284854699275786

(11)

B:=Vectorrow5,datatype=integer

B:=00000

(12)

Copy first row of A to B.

CopyA,0,4,B

B

4122214123

(13)

Copy fourth row of A to B.

CopyA,41,4,B

B

699275786

(14)

Copy third column of A to C.

C:=Vectorrow4,datatype=integer:

CopyA,314,C

C,A1..4,3

2130847,2130847

(15)

Copy all contents of Matrix to a Vector. Note that order is important here.

C_order

interfacertablesize=12

10

(16)

A:=LinearAlgebra:-RandomMatrix3,4,generator=100..100,outputoptions=datatype=integer,order=C_order

A:=631002818238382176559480

(17)

B:=Vectorrow12,datatype=integer:

CopyA,B

B

1 .. 12 VectorrowData Type: integerStorage: rectangularOrder: Fortran_order

(18)

Fortran_order

A:=LinearAlgebra:-RandomMatrix3,4,generator=100..100,outputoptions=datatype=integer,order=Fortran_order

A:=753286373672786067104578

(19)

CopyA,B

B

1 .. 12 VectorrowData Type: integerStorage: rectangularOrder: Fortran_order

(20)

See Also

ArrayTools, ArrayTools[BlockCopy], ArrayTools[Fill], C_order, Fortran_order, interface, LinearAlgebra[RandomMatrix], Vector


Download Help Document

Was this information helpful?



Please add your Comment (Optional)
E-mail Address (Optional)
What is ? This question helps us to combat spam