fortran2008数组操作-1
Fortran 2008 提供了丰富的数组操作功能,这些功能使得数组处理更加简洁、高效和直观。以下是一些常见的数组操作:
1. 数组声明和初始化
声明数组
初始化数组
-
使用数组构造器:
-
使用
data语句:
2. 数组切片
数组切片允许你访问数组的子集。
real, dimension(10) :: x
x = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0]
! 访问第 2 到第 5 个元素
print *, x(2:5) ! 输出: 2.0 3.0 4.0 5.0
! 访问第 1 到第 10 个元素,步长为 2
print *, x(1:10:2) ! 输出: 1.0 3.0 5.0 7.0 9.0
3. 数组操作
逐元素操作
Fortran 支持对数组的逐元素操作,包括加法、减法、乘法和除法。
real, dimension(5) :: a, b, c
a = [1.0, 2.0, 3.0, 4.0, 5.0]
b = [6.0, 7.0, 8.0, 9.0, 10.0]
c = a + b ! 逐元素加法
c = a - b ! 逐元素减法
c = a * b ! 逐元素乘法
c = a / b ! 逐元素除法
标量与数组操作
标量可以与数组进行逐元素操作。
real, dimension(5) :: x, y
real :: scalar = 2.0
x = [1.0, 2.0, 3.0, 4.0, 5.0]
y = scalar * x ! 标量乘法
y = x / scalar ! 标量除法
4. 数组函数
Fortran 提供了许多内置的数组函数,用于执行常见的数组操作。
数组大小
real, dimension(3, 4) :: matrix
integer :: size1, size2
size1 = size(matrix, 1) ! 第一维的大小
size2 = size(matrix, 2) ! 第二维的大小
print *, "Size of first dimension:", size1
print *, "Size of second dimension:", size2
数组形状
real, dimension(3, 4) :: matrix
integer, dimension(:), allocatable :: shape
shape = shape(matrix)
print *, "Shape of matrix:", shape
数组转置
real, dimension(3, 4) :: matrix
real, dimension(4, 3) :: transposed
matrix = reshape([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], [3, 4])
transposed = transpose(matrix)
print *, "Transposed matrix:"
print *, transposed
数组求和
数组最大值和最小值
real, dimension(5) :: x
x = [1.0, 2.0, 3.0, 4.0, 5.0]
print *, "Maximum value in x:", maxval(x)
print *, "Minimum value in x:", minval(x)
5. 数组分配和释放
动态数组
real, allocatable :: x(:)
integer :: n
n = 10
allocate(x(n))
x = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0]
print *, "Dynamic array x:", x
deallocate(x)
可选参数
real, allocatable :: x(:)
integer :: n
n = 10
allocate(x(n), stat=ierr)
if (ierr /= 0) then
print *, "Allocation failed"
else
x = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0]
print *, "Dynamic array x:", x
end if
deallocate(x)
6. 数组构造器
使用 reshape
real, dimension(3, 4) :: matrix
matrix = reshape([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], [3, 4])
print *, "Matrix:"
print *, matrix
使用 spread
real, dimension(5) :: x
real, dimension(5, 3) :: y
x = [1.0, 2.0, 3.0, 4.0, 5.0]
y = spread(x, 2, 3)
print *, "Spread array y:"
print *, y
7. 数组比较
元素比较
real, dimension(5) :: a, b
logical, dimension(5) :: comparison
a = [1.0, 2.0, 3.0, 4.0, 5.0]
b = [1.0, 2.0, 3.0, 4.0, 6.0]
comparison = a == b
print *, "Comparison result:", comparison
8. 数组排序
Fortran 2008 提供了 sort 函数,用于对数组进行排序。
9. 数组广播
Fortran 支持数组广播,允许对不同形状的数组进行操作。
real, dimension(3, 3) :: matrix
real, dimension(3) :: vector
real, dimension(3, 3) :: result
matrix = reshape([1, 2, 3, 4, 5, 6, 7, 8, 9], [3, 3])
vector = [1.0, 2.0, 3.0]
result = matrix + vector
print *, "Broadcasted result:"
print *, result
总结
Fortran 2008 提供了丰富的数组操作功能,包括数组声明、初始化、切片、逐元素操作、标量与数组操作、数组函数、动态数组、数组构造器、比较、排序和广播等。这些功能使得数组处理更加简洁和高效。通过合理使用这些功能,可以大大简化代码并提高程序的性能。