稀疏矩阵

稀疏矩阵算法

亡梦爱人 提交于 2019-12-26 22:50:13
1、稀疏矩阵的压缩存储  为了节省存储单元,可只存储非零元素。由于非零元素的分布一般是没有规律的,因此在存储非零元素的同时,还必须存储非零元素所在的行号、列号,才能迅速确定一个非零元素是矩阵中的哪一个元素。稀疏矩阵的压缩存储会失去随机存取功能。  其中每一个非零元素所在的行号、列号和值组成一个三元组(i,j,a ij ),并由此三元组惟一确定。  稀疏矩阵进行压缩存储通常有两类方法:顺序存储和链式存储。链式存储方法。 2、三元组表  将表示稀疏矩阵的非零元素的三元组按行优先(或列优先)的顺序排列(跳过零元素),并依次存放在向量中,这种稀疏矩阵的顺序存储结构称为三元组表。 注意:   以下的讨论中,均假定三元组是按行优先顺序排列的。        (1)三元组表的类型说明   为了运算方便,将矩阵的总行数、总列数及非零元素的总数均作为三元组表的属性进行描述。其类型描述为: #define MaxSize 10000 //由用户定义 typedef int DataType; //由用户定义 typedef struct { //三元组 int i,j;//非零元的行、列号 DataType v; //非零元的值 }TriTupleNode; typedef struct{ //三元组表 TriTupleNode data[MaxSize]; //三元组表空间 int m,n,t; /

论文解读:(TranSparse)Knowledge Graph Completion with Adaptive Sparse Transfer Matrix

社会主义新天地 提交于 2019-12-12 06:27:25
论文解读:(TranSparse)Knowledge Graph Completion with Adaptive Sparse Transfer Matrix   先前的基于深度学习的知识表示模型TransE、TransH、TransR(CTransR)和TransD模型均一步步的改进了知识表示的方法,在完善知识图谱补全工作上逐渐提高效果。通过先前的模型,我们基本掌握了知识表示的学习方法:首先通过投影策略将实体和关系映射到对应的语义空间,其次均使用得分函数 f ( h , t ) = ∣ ∣ h + r − t ∣ ∣ f(h,t)=||h+r-t|| f ( h , t ) = ∣ ∣ h + r − t ∣ ∣ 表示实体对的评分。另外使用负采样生成错误样本进行训练,使得正确的样本得分函数值降低,错误样本的得分函数值升高。然而这些模型均忽略了图谱的两个重要特性: 异质性(heterogeneity) 和 不平衡性(imbalance) 。图谱中的异质性是指不同关系对应的实体对数量不一致,例如对于关系 r r r 链接的所有实体对数量可能非常多,而对于 r ′ r' r ′ 链接的所有实体对数量可能只有1个。不平衡性是指头尾实体的数量不一致,例如形如对于(地名,local,洲名)的三元组,地名可能成千上万个,而洲名只有七个。由于数量的不对等

python scipy 稀疏矩阵详解

核能气质少年 提交于 2019-12-07 22:20:15
文章目录 稀疏矩阵格式 coo_matrix csr_matrix csc_matrix lil_matrix dok_matrix dia_matrix bsr_matrix 实用函数 经验总结 稀疏矩阵格式 coo_matrix    coo_matrix 是最简单的稀疏矩阵存储方式,采用三元组 (row, col, data) (或称为 ijv format )的形式来存储矩阵中非零元素的信息。在实际使用中,一般 coo_matrix 用来创建矩阵,因为 coo_matrix 无法对矩阵的元素进行增删改操作;创建成功之后可以转化成其他格式的稀疏矩阵(如 csr_matrix 、 csc_matrix )进行转置、矩阵乘法等操作。 ​ coo_matrix 可以通过四种方式实例化,除了可以通过 coo_matrix(D) , D代表密集矩阵; coo_matrix(S) , S代表其他类型稀疏矩阵或者 coo_matrix((M, N), [dtype]) 构建一个shape为M*N的空矩阵,默认数据类型是 d ,还可以通过 (row, col, data) 三元组初始化: >> > import numpy as np >> > from scipy . sparse import coo_matrix >> > _row = np . array ( [ 0 , 3 , 1

tf.sparse_placeholder

ⅰ亾dé卋堺 提交于 2019-12-07 17:06:04
tf.sparse_placeholder是tensorflow中稀疏矩阵占位符,主要用于计算CTC的loss。从名字看,就是一个占位符用的,需要在run的时候喂数据。另外TF中还有一个稀疏矩阵张量 tf.SparseTensor。我在使用的时候一直报下面的错: [feed.indices, feed.values, feed.dense_shape], feed_val)), TypeError: zip argument #2 must support iteration 表示很尴尬,根据出错信息可以看出是这个稀疏矩阵出错了,我在feed的时候喂的是 tf.SparseTensor(indices=indices, values=values, dense_shape=shape) 给我报错是什么意思?看 tf.sparse_placeholder 的源码,如下: 恍然大悟,给tf.sparse_placeholder喂数据的时候应该直接填充 (indices, values, shape),或者使用 tf.SparseTensorValue。如果使用tf.SparseTensor,需要按照下面的形式。 还是不熟悉啊!!! 来源: CSDN 作者: 二加三等于五 链接: https://blog.csdn.net/haveanybody/article/details

十字链表完成稀疏矩阵相加

谁说我不能喝 提交于 2019-12-06 11:43:54
#include <iostream> #include <malloc.h> #include <stdio.h> using namespace std; typedef struct OLNode { int i,j; int e; struct OLNode *right,*down; }OLNode,*OLink; typedef struct { OLink *rhead,*chead; int mu,nu,tu; }CrossList; int CreateSMatrix_OL(CrossList &M) { int i,j,k,e; OLink p,q,q1; cout<<"请分别输入该矩阵的行数,列数,所含非零元的个数:"<<endl; cin>>M.mu>>M.nu>>M.tu; if(!M.mu||!M.nu||!M.tu||M.mu*M.mu<M.tu) return 0; M.rhead=(OLink *)malloc((M.mu+1)*sizeof(OLink));//默认从第一行和第一列开始 if(!M.rhead) return 0; M.chead=(OLink *)malloc((M.nu+1)*sizeof(OLink)); if(!M.chead) return 0; for(k=1;k<=M.mu;k++) M.rhead[k]=NULL;

稀疏矩阵存储方式

风流意气都作罢 提交于 2019-12-05 03:04:54
  在数据预处理中,我们需要采集前的数据是非常庞大的。不妨将数据集D视作一个矩阵,每一行对应一个样本,每一列对应某个特征。   而在现实生活中,例如文档分类任务,以每一个字词作为一个特征,特征属性多大成千上万,即数千数万列,而相当一部分特征对于所考虑的问题具有“稀疏性”,也就是矩阵中许多列与当前学习任务无关。这一部分涉及到了特征降维等知识。   在此之前,由于属性的繁多,并不是每一个样本都具有所有属性。矩阵的每一行都将充斥着相当一部分零元素。当样本具有这样的稀疏性时,对学习任务会有不少的好处!例如,线性支持向量机之所以能在文字处理上有良好的性能,恰是由于文本数据在使用字频时具有高度的稀疏性,使得大部分问题都线性可分。而为了存储的高效性,必须了解一些稀疏矩阵的存储方法。 一、Coordinate(COO) 图一、Coordinate存储方式示例   这是最简单的存储格式,每一个元素需要一个三元组来表示,分别是 行号、 列号 以及 数值。这种方式简单易理解,但是空间不是最优的。 二、Compressed Sparse Row(CSR)    图二、Compressed Sparse Row存储方式示例一   CSR不是三元组,而是整体的编码方式。数值values和列号column indices与COO一致,表示一个元素以及其列号。 行偏移row

scipy.sparse 稀疏矩阵的转化

僤鯓⒐⒋嵵緔 提交于 2019-12-04 23:49:18
indptr = np.array([0, 2, 3, 6]) indices = np.array([0, 2, 2, 0, 1, 2]) data = np.array([1, 2, 3, 4, 5, 6]) scipy.sparse.csc_matrix((data, indices, indptr), shape=(3, 3)).toarray() output: array([[1, 0, 4], [0, 0, 5], [2, 3, 6]]) 转换成稀疏矩阵有3种方式: crc_matrix, csr_matrix, coo_matrix crc_matrix 矩阵是按照列存储的 indptr 是每列数据的对应的data的下标,即 indptr[0] - indptr[1], indptr[2] - indptr[1], indptr[3] - indptr[2] 数据有3列 indices 是 对应的行的下标大小 第一列: data[ indptr[0] : indptr[1] ] = data[0:2] = 1, 2 indices[indptr[0] : indptr[1] ] = indices[0:2] = 0, 2 output: [ [1], [0], [2] ] 第二列: data[ indptr[1] : indptr[2] ] = data[2:3]

数据挖掘学习(三)――文本挖掘

匿名 (未验证) 提交于 2019-12-03 00:38:01
对情感进行分析,对评论数据进行相应的分析。 可以用结巴进行分词,主要是划分各文本之间的关系,进行分词操作。 Dict.txt是指结巴使用的分词,也可以自己定义相应的结巴词典,也可以下载一些好用的词典。 第一个参数:我们的词汇; 第二个参数:词频(即重要的程度); 第三个参数:词性 1)使用jieba进行分词: #!/usr/bin/env python # _*_ UTF-8 _*_ import jieba sentence = " 我喜欢东方明珠 " # cut_all=True :为全模式。 # cut_all=FALSE :精准模式。 words = jieba.cut(sentence , cut_all = True ) print (words) # 全模式分词,用的是循环才能获取相应的结果,如果直接 print 则显示不成功。 for item in words: print (item) print ( "----------------" ) # 精准模式分词。 words2 = jieba.cut(sentence , cut_all = False ) for item in words2: print (item) print ( "----------------" ) # 搜索引擎分词: words3 = jieba.cut_for_search

35-稀疏矩阵的三元组表示方式

匿名 (未验证) 提交于 2019-12-03 00:38:01
1.存储非零元素 2.同时存储该非零元素所对应的行下标和列下标 3.稀疏矩阵中的每一个非零元素需由一个三元组(i, j, aij)唯一确定,稀疏矩阵中的所有非零元素构成三元组线性表,三元组中的i就是行下标,j是列下标,aij是对应的元素值。 图1-稀疏矩阵的压缩存储 图2-定义存储结构 #define MaxSize 100 //定义三元组线性表中的数据元素存储结构 typedef struct { int row ; //行号 int col ; //列号 ElemType d ; //元素值,ElemType为数据元素类型 } TupNode ; //三元组定义 //定义三元组线性表存储结构 typedef struct { int rows ; //行数值 int cols ; //列数值 int nums ; //非零元素个数 TupNode data [ MaxSize ]; //data数据域 } TSMatrix ; //三元组顺序表定义 算法:以行序方式扫描二维矩阵A,将其非零的元素加入到三元组t。 要求为data域以行序为主序顺序排列 图中是采用6行7列的稀疏矩阵作为说明,但是在下面的算法中以3行4列说明 //以行序方式扫描二维矩阵A,将其非零的元素加入到三元组t //以3行4列的稀疏矩阵为例 void CreatMat ( TSMatrix * t , int