三元组表与稀疏矩阵怎么转换?

2024年12月02日 18:51
有3个网友回答
网友(1):

三元组,第1列是行号,第2列是列号,第3列是非零元素的值。

  1. 三元组是指形如((x,y),z)的集合(这就是说,三元组是这样的偶,其第一个射影亦是一个偶),常简记为(x,y,z)。

  2. 三元组是:计算机专业的一门公共基础课程——数据结构里的概念。主要是用来存储稀疏矩阵的一种压缩方式,也叫三元组表。

  3. 假设以顺序存储结构来表示三元组表(triple table),则得到稀疏矩阵的一种压缩存储方式,即三元组顺序表,简称三元组表。

网友(2):

matlab使用sparse转换。
例如:
s=[1 2 2];%起点

t=[2 3 4];%终点
w=[2 1 3];%权重
dg=sparse(s,t,w,4,4);%4,4为稀疏矩阵大小
ans>>
(1,2) 2
(2,3) 4
(2,4) 3

网友(3):

非转载,知乎本人

用python将三元组转化为稀疏矩阵

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

Created on Tue Dec 24 11:10:53 2019

@author: meandera

# coding=utf-8

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文件同样的位置

参考资料网页链接