- Fortran 教程
- Fortran - 首頁
- Fortran - 概述
- Fortran - 環境設定
- Fortran - 基本語法
- Fortran - 資料型別
- Fortran - 變數
- Fortran - 常量
- Fortran - 運算子
- Fortran - 決策
- Fortran - 迴圈
- Fortran - 數字
- Fortran - 字元
- Fortran - 字串
- Fortran - 陣列
- Fortran - 動態陣列
- Fortran - 派生資料型別
- Fortran - 指標
- Fortran - 基本輸入輸出
- Fortran - 檔案輸入輸出
- Fortran - 過程
- Fortran - 模組
- Fortran - 本徵函式
- Fortran - 數值精度
- Fortran - 程式庫
- Fortran - 程式設計風格
- Fortran - 除錯程式
- Fortran 資源
- Fortran - 快速指南
- Fortran - 有用資源
- Fortran - 討論
Fortran - 建構函式
下表描述了建構函式
| 函式 | 描述 |
|---|---|
| merge(tsource, fsource, mask) | 此函式連線兩個陣列。如果 mask 中的條件為 .true.,則它給出 tsource 中的元素;如果 mask 中的條件為 .false.,則給出 fsource 中的元素。兩個欄位 tsource 和 fsource 必須具有相同的型別和相同的形狀。結果也具有此型別和形狀。此外,mask 必須具有相同的形狀。 |
| pack(array, mask, vector) | 它在 mask 的控制下將陣列打包到向量中。邏輯陣列 mask 的形狀必須與陣列的形狀一致,否則 mask 必須是標量。如果包含 vector,它必須是秩為 1(即向量)的陣列,其元素至少與 mask 中為真的元素一樣多,並且與陣列具有相同的型別。如果 mask 是值為 .true. 的標量,則 vector 必須具有與陣列相同數量的元素。 |
| spread(source, dim, ncopies) | 它返回一個與引數 source 型別相同的陣列,其秩增加一。引數 dim 和 ncopies 為整數。如果 ncopies 為負數,則改為使用零。如果 source 是標量,則 spread 變為一個向量,其中包含 ncopies 個元素,所有這些元素都與 source 的值相同。引數 dim 指示要擴充套件哪個索引。它必須在 1 和 1+(source 的秩) 之間,如果 source 是標量,則 dim 必須為 1。引數 ncopies 是新維度中元素的數量。 |
| unpack(vector, mask, array) | 它在 mask 的控制下將向量分散到陣列中。邏輯陣列 mask 的形狀必須與陣列的形狀一致。陣列 vector 必須具有秩 1(即它是一個向量),其元素至少與 mask 中為真的元素一樣多,並且還必須與陣列具有相同的型別。如果 array 給定為標量,則將其視為與 mask 形狀相同且在所有位置都具有相同標量元素的陣列。 結果將是一個與 mask 形狀相同且與 vector 型別相同的陣列。值將是來自 vector 的那些被接受的值,而在陣列中的其餘位置將保留舊值。 |
示例
以下示例演示了該概念
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
fortran_arrays.htm
廣告