赞
踩
写论文时进行将三元组转化为稀疏矩阵的操作,在网上疯狂找也无法找到。后来在google上找到了一些,拼凑成一份简陋代码,为方便展示和从百度中搜到,放到知乎这里。
我的问题是arcgis输出的空间权重矩阵是三元组类型,需要转化成方阵,即将图一中的【1,2,0.21984】转化成图二中第一行第二列的【0.212984】
这是我第一次用python解决实际问题,还请大佬多多指教。
- Created on Tue Dec 24 11:10:53 2019
-
- @author: meandera
-
- import xlrd
- import numpy as np
- import pandas as pd
- def read_xlrd(excelFile):
- data = xlrd.open_workbook(excelFile)
- table = data.sheet_by_index(0)
- dataFile = []
-
- for rowNum in range(table.nrows):
- # if 去掉表头,如果三元组表的第一行就是数据则注释掉下一行
- if rowNum > 0:
- dataFile.append(table.row_values(rowNum))
-
- return dataFile
-
- excelFile = '你电脑中三元组xlsx的地址'
- a = read_xlrd(excelFile)
- b = np.array(a, dtype = float)
- row, col, data = [np.squeeze(splt) for splt
- in np.hsplit(b, b.shape[-1])]
- from scipy.sparse import coo_matrix
- c=coo_matrix((data, (row, col)),shape=(31,31)).toarray()
- #shape的参数一定要填,不然会出错。输入比行和列+1的数据即可,我输入的31是因为我的矩阵有30行30列
- #因为我的三元组的顺序从1开始,python计数是从0开始。
-
- data = pd.DataFrame(c)
- writer = pd.ExcelWriter('swm.xlsx') # 写入你的Excel文件名,我的文件名是swm.xlsx
- data.to_excel(writer, 'sheet1', float_format='%.5f') # ‘sheet1’是写入excel的sheet名
- writer.save()
- writer.close()#运行完成后该xlsx文件会保存在与.py文件同样的位置
主要参考:
Create Numpy 2D Array with data from triplets of (x,y,value)stackoverflow.comCopyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。