python button设置为不可用_用python将三元组转化为稀疏矩阵

写论文时进行将三元组转化为稀疏矩阵的操作,在网上疯狂找也无法找到。后来在google上找到了一些,拼凑成一份简陋代码,为方便展示和从百度中搜到,放到知乎这里。

我的问题是arcgis输出的空间权重矩阵是三元组类型,需要转化成方阵,即将图一中的【1,2,0.21984】转化成图二中第一行第二列的【0.212984】

7d78943191250fec2cf4d6d63be6a5f0.png
图一

10df7a737459511d3771dd157a2e18fc.png
图二

这是我第一次用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.com
fc60c01cf1671bd333e95fb26b566ddc.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值