• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
yif
专注于C/C++,C#,Objective-C,GIS,空间统计,数据挖掘,智慧城市
博客园    首页    新随笔    联系   管理    订阅  订阅
SWM格式稀疏权重矩阵转换为方阵形式全过程分享

在进行空间统计实验过程中,经常涉及到空间权重矩阵的处理,有时候需要将ArcGIS生成的swm格式的权重矩阵转换为形如“0 1”的方阵格式。这里将我的办法整理出来。

1.用如下工具箱生成swm格式的权重矩阵

  

2.将swm格式的权重矩阵转换为dbf属性表

    

3.用excel打开dbf将其转换为txt文本文件

4.写程序转换格式并保存

代码如下:

 1 static void Main(string[] args)
 2         {
 3             //读取文件并转换格式
 4             StreamReader sr = File.OpenText("E:\\AcaDissertation\\Data\\weight_arc.txt");
 5             double[,] weights = new double[47, 47];
 6             while (sr.ReadLine() != null)
 7             {
 8                 string[] line = sr.ReadLine().Split('\t');
 9 
10                 weights[int.Parse(line[0])-1, int.Parse(line[1])-1] = double.Parse(line[2]);
11             }
12             SaveMatrix(weights, "E:\\AcaDissertation\\Data\\weight_mat.txt");
13             Console.WriteLine("好了!");
14         }
15 
16         // 保存矩阵到文件
17         public static void SaveMatrix(double[,] InMatrix, string OutFileName)
18         {
19             int row = InMatrix.GetLength(0), col = InMatrix.GetLength(1);
20             FileStream aFile = new FileStream(OutFileName, FileMode.OpenOrCreate);
21             StreamWriter sw = new StreamWriter(aFile);
22             for (int i = 0; i < row; i++)
23             {
24                 for (int j = 0; j < col; j++)
25                 {
26                     sw.Write("{0}{1}", InMatrix[i, j], " ");
27                 }
28                 sw.WriteLine();
29             }
30             sw.Close();
31         }

最后的最后,转换后的权重矩阵为:

 

posted on 2016-03-04 12:41  mattran  阅读(3104)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3