コード例 #1
0
 /// <summary>
 /// 获取时空权重矩阵
 /// </summary>
 /// <returns></returns>
 public double[,] GetTimeDisMatr(MatrType matrType)
 {
     int iLength = ZDCount * SJCount;
     double[,] matr = new double[iLength, iLength];
     double[,] disMatr = matrType == MatrType.Complete ? disMatrA : disMatrB;
     for (int i = 0; i < iLength; i++)
     {
         for (int j = 0; j < iLength; j++)
         {
             int ZD1 = i / SJCount;
             int ZD2 = j / SJCount;
             int SJ1 = i % SJCount;
             int SJ2 = j % SJCount;
             matr[i, j] = disMatr[ZD1, ZD2] * timeMatr[SJ1, SJ2];
         }
     }
     return matr;
 }
コード例 #2
0
 /// <summary>
 /// 空间权重矩阵计算
 /// </summary>
 /// <param name="dtZDLocation"></param>
 /// <param name="type"></param>
 /// <param name="lambda"></param>
 /// <returns></returns>
 private static double[,] GetZDDistanceMatrix(DataTable dtZDLocation, MatrType type, double lambda)
 {
     DataView dv = dtZDLocation.DefaultView;
     dv.Sort = s_DICMATR_ZDDM + " asc";
     DataTable dt = dv.ToTable();
     int iCount = dt.Rows.Count;
     double[,] matr = new double[iCount, iCount];
     for (int i = 0; i < iCount; i++)
     {
         DataRow drI = dt.Rows[i];
         double xi = (double)drI[s_DICMATR_X] / 1000;
         double yi = (double)drI[s_DICMATR_Y] / 1000;
         for (int j = 0; j < iCount; j++)
         {
             DataRow drJ = dt.Rows[j];
             double xj = (double)drJ[s_DICMATR_X] / 1000;
             double yj = (double)drJ[s_DICMATR_Y] / 1000;
             double dis = Math.Sqrt((xi - xj) * (xi - xj) + (yi - yj) * (yi - yj));
             matr[i, j] = Math.Exp(-dis / lambda);
         }
     }
     if (type == MatrType.Complete)
     {
         for (int i = 0; i < iCount; i++)
         {
             matr[i, i] = 0;
         }
     }
     return matr;
 }