在 Fortran 中检查数组的所有元素是否符合逻辑条件
Checking all elements of array for a logical condition in fortran
我想检查数组的所有行是否符合逻辑条件。我按照 GNU GCC 指南 https://gcc.gnu.org/onlinedocs/gfortran/ALL.html
中的描述使用了函数 ALL
这是一个示例代码:
program test3
implicit none
real, allocatable, dimension (:,:) :: mat1
integer :: i,j,k,r
logical :: lg
r=3
allocate(mat1(r,r))
mat1=transpose( reshape( (/-1,-2,-3,-4,-5,-6,-7,-8,-9/), (/3,3/)))
lg=all (abs(mat1)<10,1)
write (*,*) lg
end program
在这个程序中,我想检查所有行的所有元素的绝对值是否小于 10。但是我得到错误
lg=all (abs(mat1)<10,1)
Error: Incompatible ranks 0 and 1 in assignment
知道这个错误或如何进行检查吗?
使用它来获取标量逻辑:
lg = all(abs(mat1) < 10)
Error: Incompatible ranks 0 and 1 in assignment
表示您正在尝试将 rank-1 数组分配给标量变量。
在这种情况下,lg
是您的标量左侧。当你想针对每一行测试条件时(使用 [dim=]1
说明符支持),lg
是一个 rank-1 的数组,其中元素的数量与 mat1
.
也就是说,因为 Fortran 使用 ALL(...,dim=1)
以列为主存储,所以这里实际上是按列为您提供测试结果。一般来说,ALL(L, dim=n)
的结果是 [d_1, d_2, ..., d_{n-1}, d_{n+1}, ..., d_m]
的形状,而 L
的形状是 [d_1, ..., d_m]
.
[如 中所述,ALL(L)
的结果是一个标量。如果这就是你想要的,那么我可能会对 ALL
.]
的正式描述语言的潜在混淆说点什么
我想检查数组的所有行是否符合逻辑条件。我按照 GNU GCC 指南 https://gcc.gnu.org/onlinedocs/gfortran/ALL.html
中的描述使用了函数ALL
这是一个示例代码:
program test3
implicit none
real, allocatable, dimension (:,:) :: mat1
integer :: i,j,k,r
logical :: lg
r=3
allocate(mat1(r,r))
mat1=transpose( reshape( (/-1,-2,-3,-4,-5,-6,-7,-8,-9/), (/3,3/)))
lg=all (abs(mat1)<10,1)
write (*,*) lg
end program
在这个程序中,我想检查所有行的所有元素的绝对值是否小于 10。但是我得到错误
lg=all (abs(mat1)<10,1)
Error: Incompatible ranks 0 and 1 in assignment
知道这个错误或如何进行检查吗?
使用它来获取标量逻辑:
lg = all(abs(mat1) < 10)
Error: Incompatible ranks 0 and 1 in assignment
表示您正在尝试将 rank-1 数组分配给标量变量。
在这种情况下,lg
是您的标量左侧。当你想针对每一行测试条件时(使用 [dim=]1
说明符支持),lg
是一个 rank-1 的数组,其中元素的数量与 mat1
.
也就是说,因为 Fortran 使用 ALL(...,dim=1)
以列为主存储,所以这里实际上是按列为您提供测试结果。一般来说,ALL(L, dim=n)
的结果是 [d_1, d_2, ..., d_{n-1}, d_{n+1}, ..., d_m]
的形状,而 L
的形状是 [d_1, ..., d_m]
.
[如 ALL(L)
的结果是一个标量。如果这就是你想要的,那么我可能会对 ALL
.]