Keyword: 距離行列, 計算, 多変量解析
概要
本サンプルは距離行列の計算を行うFortranによるサンプルプログラムです。 本サンプルは以下に示されるデータについて距離行列の計算を行います。
※本サンプルはnAG Fortranライブラリに含まれるルーチン g03eaf() のExampleコードです。本サンプル及びルーチンの詳細情報は g03eaf のマニュアルページをご参照ください。
ご相談やお問い合わせはこちらまで
入力データ
(本ルーチンの詳細はg03eaf のマニュアルページを参照)| このデータをダウンロード |
G03EAF Example Program Data 5 3 : N,M 'I' 'S' 'U' : UPDATE,DIST,SCAL 1.0 1.0 1.0 2.0 1.0 2.0 3.0 6.0 3.0 4.0 8.0 2.0 5.0 8.0 0.0 : End of X 0 1 1 : ISX
- 1行目はタイトル行で読み飛ばされます。
- 2行目に観測値の数(n=5)と変数の数(m=3)を指定しています。
- 3行目には既存の行列が更新されるかどうか(update='I':距離が行列Dに追加される前に行列Dは初期化される)、計算される距離の種類(dist='S':ユークリッド平方距離)、使用される変数の標準化(scal='U':スケーリングしない)を指定しています。
- 4〜8行目に変数の値(x)を指定しています。
- 9行目に変数が距離行列の計算に含まれるどうかを示すフラグ(isx)を指定しています。"1"の場合は計算に含まれます。
出力結果
(本ルーチンの詳細はg03eaf のマニュアルページを参照)| この出力例をダウンロード |
G03EAF Example Program Results
Distance Matrix
1 2 3 4
2 1.00
3 29.00 26.00
4 50.00 49.00 5.00
5 50.00 53.00 13.00 4.00
- 3〜10行目に距離行列が出力されています。
ソースコード
(本ルーチンの詳細はg03eaf のマニュアルページを参照)
※本サンプルソースコードは科学技術・統計計算ライブラリである「nAG Fortranライブラリ」のルーチンを呼び出します。
サンプルのコンパイル及び実行方法
| このソースコードをダウンロード |
PROGRAM g03eafe
! G03EAF Example Program Text
! Mark 23 Release. nAG Copyright 2011.
! .. Use Statements ..
USE nag_library, ONLY : g03eaf, nag_wp
! .. Implicit None Statement ..
IMPLICIT NONE
! .. Parameters ..
INTEGER, PARAMETER :: nin = 5, nout = 6
! .. Local Scalars ..
INTEGER :: i, ifail, ld, ldx, lj, m, n, uj
CHARACTER (1) :: dist, scal, update
CHARACTER (80) :: fmt
! .. Local Arrays ..
REAL (KIND=nag_wp), ALLOCATABLE :: d(:), s(:), x(:,:)
INTEGER, ALLOCATABLE :: isx(:)
! .. Executable Statements ..
WRITE (nout,*) 'G03EAF Example Program Results'
WRITE (nout,*)
! Skip heading in data file
READ (nin,*)
! Read in the problem size
READ (nin,*) n, m
! Read in information on the type of distance matrix to use
READ (nin,*) update, dist, scal
ldx = n
ld = n*(n-1)/2
ALLOCATE (x(ldx,m),isx(m),s(m),d(ld))
! Read in the data used to construct distance matrix
READ (nin,*) (x(i,1:m),i=1,n)
! Read in variable inclusion flags
READ (nin,*) isx(1:m)
! Read in scaling
IF (scal=='G' .OR. scal=='g') THEN
READ (nin,*) s(1:m)
END IF
! Compute the distance matrix
ifail = 0
CALL g03eaf(update,dist,scal,n,m,x,ldx,isx,s,d,ifail)
! Display results
WRITE (nout,*) ' Distance Matrix'
WRITE (nout,*)
WRITE (fmt,99999) '(3X,', n - 1, 'I8)'
WRITE (nout,fmt) (i,i=1,n-1)
WRITE (nout,*)
WRITE (fmt,99999) '(1X,I2,2X,', n - 1, '(3X,F5.2))'
DO i = 2, n
lj = (i-1)*(i-2)/2 + 1
uj = i*(i-1)/2
WRITE (nout,fmt) i, d(lj:uj)
END DO
99999 FORMAT (A,I0,A)
END PROGRAM g03eafe
