稀疏矩阵转CSR格式存储

1.随机生成稀疏矩阵

#include<stdlib.h>
#include<assert.h>
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;void fill_random(float*data, int m, int n) {srand((unsigned) (time(NULL))); //每次生成的随机数不一样for (int i = 0; i < m*n; i++) {data[i] = rand() % 100;  //生成100以内的随机数if (data[i] < 80) //made sparse data[i] = 0;}
}void print_matrix(float*data, int m, int n) {for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {int l = i + j * m;cout << data[l] << " a";}cout << endl;} cout << endl;
}void print_matrix(int*data, int m, int n) {for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {int l = i + j * m;cout << data[l] << " b";}cout << endl;}cout << endl;
}void dense2csr(float*data, int*&rowPtr, int*&colInd, float*&val, int m, int n) {rowPtr = (int*)malloc(sizeof(int)*(m + 1));int* tcolInd = (int*)malloc(sizeof(int)*(m *n));float* tval = (float*)malloc(sizeof(float)*(m *n));int towtal = m * n;int nnv = 0;for (int i = 0; i < m; i++) {rowPtr[i] = nnv;for (int j = 0; j < n; j++) {int l = i + j * m;if (data[l] != 0) {tcolInd[nnv] = j;tval[nnv] = data[l];nnv++;}}}rowPtr[m] = nnv;colInd = (int*)malloc(sizeof(int)*(nnv));val = (float*)malloc(sizeof(float)*(nnv));memcpy(colInd, tcolInd, sizeof(float)*nnv);memcpy(val, tval, sizeof(float)*nnv);free(tcolInd);free(tval);
}void csr2dense(int*&rowPtr, int*&colInd, float*&val, float*&data, int m, int n) {data = (float*)calloc(m*n,sizeof(float));int nnv = rowPtr[m];int* help = (int*)malloc(sizeof(int)*nnv); //indicates row index of elementfor (int i = 0, l = 1; i < nnv; i++) {while (i >= rowPtr[l])l++;help[i] = l-1;}for (int i = 0; i < nnv; i++) {int datal = help[i] + colInd[i] * m;data[datal] = val[i];}free(help);
}bool same_matrix(float*A, float*B, int m, int n) {for (int i = 0; i < m*n; i++) {if (A[i] != B[i])return false;}return true;
}int main() {int m = 5;int n = 5;float*A = (float*)malloc(sizeof(float)*m*n);fill_random(A, m, n);print_matrix(A, m, n);int*csrRowPtr;int*csrColInd;float*csrVal;dense2csr(A, csrRowPtr, csrColInd, csrVal, m, n);print_matrix(csrRowPtr, 1, m+1);print_matrix(csrColInd, 1, csrRowPtr[m]);print_matrix(csrVal, 1, csrRowPtr[m]);float*newA;csr2dense(csrRowPtr, csrColInd, csrVal, newA, m, n);print_matrix(newA, m, n);assert(same_matrix(A, newA, m, n)); //debug mode
}

稀疏矩阵转CSR格式存储相关推荐

  1. 在python中使用json格式存储数据

    在python中使用json格式存储数据 代码如下: import jsonlist1 = [{'A': [1, 2, 3, 4, 5, 6], 'B': [3, 4, 5, 6, 7]},{'C': ...

  2. 5.3稀疏矩阵的十字链表存储

    十字链表产生原因:当矩阵的非零元个数和位置在操作过程中变化较大时,就不宜采用顺序存储结构来表示三元组的线性表. 十字链表特点: 每一个非零元开用含5个域的结点表示,其中i.j和e这3个域分别表示该非零 ...

  3. 稀疏矩阵的十字链表存储表示和实现(第五章 P104 算法5.4)

    稀疏矩阵的十字链表存储 当矩阵的非零元个数和位置在操作过程中变化较大时,就不宜采用顺序存储结构来表示三元组的线性表.对这种类型的矩阵,采用链式存储结构表示三元组的线性表更为恰当. 在链表中,每个非零元 ...

  4. cuda编程与gpu并行计算(六):图稀疏矩阵转为CSR结构并传入gpu

    虽然sepgraph有这部分代码,还是自己先试着实现一下,这样读起来也方便 行压缩格式Compressed Sparse Row (CSR) CSR需要三种数据来表达:数值.列号.行转移.CSR不是三 ...

  5. 爬取中国大学排名并以csv格式存储

    爬取中国大学排名并以csv格式存储 import requests from bs4 import BeautifulSoup import bs4def get_content(url):try:u ...

  6. plt.imshow()显示以ndarray格式存储的图像数据

    1 plt.imshow()详细介绍:常用参数为红色标注 输入可以是实际的RGB(A)数据,也可以是2D标量数据,这些数据将被渲染为伪彩色图像.为了显示灰度图像,使用参数设置颜色映射:cmap='gr ...

  7. Mysql中使用json格式存储数据好吗?

    在最近的一次项目开发过程中,在数据表设计阶段,对是否用json格式存储某些数据我们产生了分歧.以往项目中对此点比较随意,导致数据表中有些json格式数据体积很大,层次很深,我担心这会降低数据查询和解析 ...

  8. 下面是以十六进制格式存储的一个 UDP 首部:~~~TCP连接使用1000字节的窗口值,而上一次的确认号是22001~~那么下一个报文段的序号是否就是 x + 1 呢?在本题中列出的 8 种情况下,画

    5-10 试说明运输层中伪首部的作用 用于计算运输层数据报校验和 5-11 某个应用进程使用运输层的用户数据报UDP,然而继续向下交给IP层后,又封装成IP数据报.既然都是数据报,可否跳过UDP而直接 ...

  9. 在MYSQL里使用哪种格式存储图片?之解惑总结

    2019独角兽企业重金招聘Python工程师标准>>> 1 写入时并无格式之分,只是保存二进制数据,读取后和写入时的格式一样. jpg图片用二进制格式写入mysql,再以二进制格式读 ...

最新文章

  1. IBM was调试端口开通演示,was服务重启、端口号查看方法
  2. BZOJ 1257 [CQOI2007]余数之和sum ——Dirichlet积
  3. 新版appium 支持name定位的方法(没试 记录再此)
  4. Mac解决终端显示乱码
  5. MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example1.5 Adding a raster layer...
  6. 罗永浩电商直播尘埃落定?有图有真相,坐等相声开播...
  7. 卷积神经网络中的权值共享
  8. Python yield 的基本概念和用法
  9. Javascript图像处理之平滑处理
  10. C#AutoResetEvent和ManualResetEvent的区别
  11. archivedDataWithRootObject NSUserDefaults
  12. 开闭原则应用-书店打折Java代码实现
  13. linux 音频处理软件推荐,Linux 上的优秀音频编辑工具推荐
  14. ArcGIS矢量数据重分类
  15. Django-rest-framework框架之drf内置认证,权限,频率类,异常处理与自动生成接口文档
  16. kuberbetes容器生命周期 - 容器探测(liveness/readiness probes)
  17. Fedformer:Frequency Enhanced DecomposedTransformer for long-term series forecasting[还在学习中···]
  18. [代码记录生活]Name evn is not bound in this Context 解决方案
  19. php调用微信公众号支付接口,Thinkphp微信公众号支付接口
  20. 这份苹果手机应用历史总排行榜很有意思!

热门文章

  1. Python循环结构之for
  2. 手机也能当门卡?!--NFC技术应用
  3. 第五章 如何使用java中的线程打印偶数和奇数
  4. 【VScode】搜索栏语法
  5. Windows 防火墙的入站和出站规则说明
  6. c语言之打印输出图形
  7. 【大话QT之十四】QT实现多语言切换
  8. SQL中的连接(左、右、内连接)
  9. 第十四届蓝桥杯(Web 应用开发)模拟赛 1 期-大学组-线上模拟赛-第一题-数据类型检测
  10. android开发中遇到的异常及解决方法