目录

Construction

下表描述了构造函数:

功能 描述
merge(tsource, fsource, mask) 此函数连接两个数组。 如果mask中的条件是.true,它给出tsource中的元素。 如果掩码中的条件为.false,则为fsource。 tsource和fsource这两个字段必须具有相同的类型和相同的形状。 结果也是这种类型和形状。 面具也必须具有相同的形状。
pack(array, mask, vector) 它通过掩码控制将数组打包到矢量。 逻辑数组掩码的形状必须与数组一致,否则掩码必须是标量。 如果包含向量,则它必须是秩为1的数组(即向量),其元素至少与掩码中为真的元素一样多,并且具有与数组相同的类型。 如果mask是一个值为.true的标量。 然后矢量必须具有与数组相同数量的元素。
spread(source, dim, ncopies) 它返回一个与参数源相同类型的数组,其等级增加1。 参数dim和ncopies是整数。 如果ncopies为负数,则使用零值。 如果source是标量,则spread会变成带有ncopies元素的向量,这些元素都与source具有相同的值。 参数dim指示要扩展的索引。 它必须在1和1+的范围内(源的等级),如果源是标量,则dim必须是1。 参数ncopies是新维度中的元素数。
unpack(vector, mask, array)

它将矢量分散到掩码控制下的数组中。 逻辑阵列掩码的形状必须与数组一致。 数组向量必须具有等级1(即它是向量),其具有至少与掩码中为真的元素一样多的元素,并且还必须具有与数组相同的类型。 如果数组作为标量给出,那么它被认为是一个与掩码具有相同形状的数组,并且到处都是相同的标量元素。

结果将是一个与mask相同形状的数组,与vector类型相同。 值将是来自可接受的向量的值,而在数组中的其余位置中保留旧值。

Example

以下示例演示了以下概念:

program arrayConstruction
implicit none
   interface
      subroutine write_array (a)
         real :: a(:,:)
      end subroutine write_array
      subroutine write_l_array (a)
         logical :: a(:,:)
      end subroutine write_l_array
   end interface
   real, dimension(2,3) :: tsource, fsource, result
   logical, dimension(2,3) :: mask
   tsource = reshape( (/ 35, 23, 18, 28, 26, 39 /), &
                    (/ 2, 3 /) )
   fsource = reshape( (/ -35, -23, -18, -28, -26, -39 /), &
                    (/ 2,3 /) )
   mask = reshape( (/ .true., .false., .false., .true., &
                 .false., .false. /), (/ 2,3 /) )
   result = merge(tsource, fsource, mask)
   call write_array(tsource)
   call write_array(fsource)
   call write_l_array(mask)
   call write_array(result)
end program arrayConstruction
subroutine write_array (a)
   real :: a(:,:)
   do i = lbound(a,1), ubound(a,1)
      write(*,*) (a(i, j), j = lbound(a,2), ubound(a,2) )
   end do
   return
end subroutine write_array
subroutine write_l_array (a)
   logical :: a(:,:)
   do i = lbound(a,1), ubound(a,1)
      write(*,*) (a(i, j), j= lbound(a,2), ubound(a,2))
   end do
   return
end subroutine write_l_array

编译并执行上述代码时,会产生以下结果:

35.0000000   18.0000000   26.0000000    
23.0000000   28.0000000   39.0000000    
-35.0000000  -18.0000000  -26.0000000    
-23.0000000  -28.0000000  -39.0000000    
T F F
F T F
35.0000000   -18.0000000  -26.0000000    
-23.0000000  28.0000000   -39.0000000    
↑回到顶部↑
WIKI教程 @2018