|
|
Example:
![]() |
|
REAL, DIMENSION(5,5) :: A INTEGER, DIMENSION(3) :: K = (/ 1, 3 /) A(2, (/1, 3, 5/)) --> A(2,1) A(2,3) A(2,5) A(2, 1:3) --> A(2,1) A(2,2) A(2,3) A(2, 1:3:2) --> A(2,1) A(2,3) A(2,5) A(2, :) --> A(2,1) A(2,2) A(2,3) A(2,4) A(2,5) A(2, K) --> A(2,1) A(2,3) |
REAL, DIMENSION(5,5) :: A INTEGER, DIMENSION(3) :: K = (/ 1, 3 /) A((/1,3/), (/1,3/)) --> A(1,1) A(1,3) (2-dim. array !!!) A(3,1) A(3,3) A((/1,3/), 1:3) --> A(1,1) A(1,2) A(1,3) A(3,1) A(3,2) A(3,3) |
|
![]() |
The first element in the result vector (w(1)) is obtained by:
1. multiply first row of matrix and the input vector: A(1, :) * v 2. sum all elements of the result of the first step: SUM ( A(1, :) * v ) |
INTEGER N = ... REAL, DIMENSION(N,N) :: A INTEGER, DIMENSION(N) :: v, w w(1) = SUM ( A(1, : ) * v ) w(2) = SUM ( A(2, : ) * v ) .. w(N) = SUM ( A(N, : ) * v ) or: DO i = 1, N w(i) = SUM ( A(i, : ) * v ) END DO |
Consider the following example:
![]() |
We can see that the Matrix-vector multiplication can be computed as:
w = A(:,1)*v(1) + A(:,2)*v(2) + A(:,3)*v(3) |
real, dimension(3,3) :: A real, dimension(3) :: v real, dimension(3) :: w integer :: i integer :: N N = size(v) w = 0.0 !! clear whole vector DO i = 1, N w = w + A( :, i ) * v(i) END DO |
|
REAL, DIMENSION(3, 3) :: A, B B = TRANSPOSE(A) |
Example:
REAL, DIMENSION(3, 3) :: A LOGICAL, DIMENSION(3, 3) :: MASK REAL, DIMENSION(4) :: B DATA MASK / .true., .true., .false., & .false., .false., .false., & .false., .true., .true. / B = PACK(A, MASK) |
To select every element for packing, use:
B = PACK(A, .TRUE.) |
F90 will automatically convert the logical value .true. into a conformable logical array
REAL, DIMENSION(10) :: A ! Source array REAL, DIMENSION(2, 5) :: B ! Destination INTEGER, DIMENSION(2) :: X = (/ 2, 5 /) ! Shape: 2 rows, 5 columns B = RESHAPE(A, X) |