FORTRAN';s maxval:使用掩码仅在上三角形上计算

FORTRAN';s maxval:使用掩码仅在上三角形上计算,fortran,Fortran,我使用二维矩阵D来存储粒子上的距离,因此根据定义D(I,j)=D(j,I) 因此,我只将值存储在数组的上三角中。 但是,当使用maxval(D)时,我运行intro时遇到了问题,因为有一半数组未初始化 是否有一个掩码允许我只考虑上三角(i,j)元组? Fortran没有“倾斜”部分,所以我认为您所要求的是不可能的。编写自己的代码来计算矩阵上三角形的最大值并不困难 如果要执行大量此类操作,则始终可以创建与D大小相同的逻辑数组,并将相应的区域设置为.True.,并在需要时将其用作掩码。但是,如果它只

我使用二维矩阵D来存储粒子上的距离,因此根据定义
D(I,j)=D(j,I)

因此,我只将值存储在数组的上三角中。 但是,当使用maxval(D)时,我运行intro时遇到了问题,因为有一半数组未初始化

是否有一个掩码允许我只考虑上三角(i,j)元组?


Fortran没有“倾斜”部分,所以我认为您所要求的是不可能的。编写自己的代码来计算矩阵上三角形的最大值并不困难

如果要执行大量此类操作,则始终可以创建与D大小相同的逻辑数组,并将相应的区域设置为
.True.
,并在需要时将其用作掩码。但是,如果它只是代码中的一个位置,那么这种方法是否比您的
maxval\u UpTriangle
方法更好并不明显,你的两句话都很好,很好地回答了“我如何才能有效地做到这一点?”的问题。我想我会接受Fortranner关于“我能用一个简单的面具表情来表达吗?”这个问题的答案
! Pseudo-code above
max_distance = maxval(D, MASK = i in [1:size(D)] .and. j <= i)
function maxval_UpTriangle(D, d_size) result(max_val)
  implicit none
  real*8, dimension(1:d_size) :: D
  integer :: i, j, d_size
  real*8 :: max_val
  do i= 1, d_size
    do j= 1, i 
      if (D(j,i) >= max_val) D(j,i) = max_val
    end do
  end do
  return
end function function maxval_UpTriangle