实现了稀疏矩阵的生成(指定稀疏程度)、稀疏矩阵转换为CSR、从CSR中恢复出矩阵、稀疏矩阵和向量的乘法等功能。从运行结果来看,稀疏矩阵存储为CSR格式和向量相乘的运行速度快于普通矩阵向量乘法,而且稀疏程度越高,优势越明显。

#include<iostream>
#include<cstdlib>
#include<ctime>
#include<stdio.h>
typedef int dtype;
using namespace std;
void csr_to_matrix(dtype *value,dtype *colindex,dtype *rowptr,int n,int a,dtype** & M){M=new int*[n];for(int i=0;i<n;i++)M[i]=new int[n];for(int i=0;i<n;i++)for(int j=0;j<n;j++)M[i][j]=0;for(int i=0;i<n;i++)for(int j=rowptr[i];j<rowptr[i+1];j++)M[i][colindex[j]]=value[j];return;
}void spmv(dtype *value,dtype *rowptr,dtype *colindex,int n,int a,dtype *x,dtype *y){//calculate the matrix-vector multiply where matrix is stored in the form of CSRfor(int i=0;i<n;i++){dtype y0=0;for(int j=rowptr[i];j<rowptr[i+1];j++)y0+=value[j]*x[colindex[j]];y[i]=y0;}return;
}int matrix_to_csr(int n,dtype **M,dtype* &value,dtype* & rowptr,dtype* & colindex){int i,j;int a=0;for(i=0;i<n;i++)for(j=0;j<n;j++)if(M[i][j]!=0)a++;value=new dtype[a];colindex=new int[a];rowptr=new int[n+1];int k=0;int l=0;for(i=0;i<n;i++)for(j=0;j<n;j++){if(j==0)rowptr[l++]=k;if(M[i][j]!=0){value[k]=M[i][j];colindex[k]=j;k++;}}rowptr[l]=a;return a;
}void matrix_multiply_vector(dtype **m,int n,dtype *x,dtype *y){for(int i=0;i<n;i++){dtype y0=0;for(int j=0;j<n;j++)y0+=m[i][j]*x[j];y[i]=y0;}return;
}void generate_sparse_matrix(dtype** & m,int n,double s){m=new int*[n];for(int i=0;i<n;i++)m[i]=new int[n];for(int i=0;i<n;i++)for(int j=0;j<n;j++){int x=rand()%100;if(x>100*s)m[i][j]=0;elsem[i][j]=x+1;}return;
}void print_matrix(dtype **m,int n){for(int i=0;i<n;i++)for(int j=0;j<n;j++){cout<<m[i][j]<<",";if(j==n-1)cout<<endl;}return;
}void generate_vector(int n,dtype* & x){x=new int[n];for(int i=0;i<n;i++)x[i]=rand()%100-50;return;
}void print_vector(int n,dtype* x){for(int i=0;i<n;i++)cout<<x[i]<<" ";return;
}
int main(){srand(time(0));int n;double s;cout<<"输入n:";cin>>n;cout<<"输入矩阵稀疏程度:";cin>>s;dtype **mat=NULL;dtype **mat_recover=NULL;dtype *vec=NULL;dtype *y=NULL;dtype *yy=NULL;dtype *value=NULL;int *colindex=NULL;int *rowptr=NULL;generate_sparse_matrix(mat,n,s);generate_vector(n,vec);generate_vector(n,y);generate_vector(n,yy);int a=matrix_to_csr(n,mat,value,rowptr,colindex);csr_to_matrix(value,colindex,rowptr,n,a,mat_recover);cout<<"matrix and csr transformation test"<<endl;int error=0;for(int i=0;i<n;i++)for(int j=0;j<n;j++)if(mat[i][j]!=mat_recover[i][j])error=1;if(error==1)cout<<"test error!"<<endl;elsecout<<"test right!"<<endl;cout<<"spvm test"<<endl;clock_t start,end;start=clock();matrix_multiply_vector(mat,n,vec,y);end=clock();printf("time1=%f\n",(double)(end-start)/CLK_TCK);start=clock();spmv(value,rowptr,colindex,n,a,vec,yy);end=clock();printf("time2=%f\n",(double)(end-start)/CLK_TCK);for(int i=0;i<n;i++)if(y[i]!=yy[i]){cout<<"test error!"<<endl;return -1;}cout<<"test right!"<<endl;return 0;
}

20210303-CSR相关推荐

  1. CSR稀疏矩阵存储方式

    矩阵可分为稠密矩阵和稀疏矩阵,对于稀疏矩阵而言,使用同样的内存来存储这个矩阵显然是对内存的浪费,那么我们就可以想办法将矩阵中所有的o元素挥着不相关元素剔除,怎么剔除,第一种方法是通过三个一维矩阵来存储 ...

  2. openssl、x509、crt、cer、key、csr、ssl、tls

    今天尝试在mac机上搭建docker registry私有仓库时,杯具的发现最新的registry出于安全考虑,强制使用ssl认证,于是又详细了解linux/mac上openssl的使用方法,接触了一 ...

  3. 转牛人博客 稀疏矩阵定义CSR COO CSC 第一个讲的清晰易懂的人

    注意CSC CSR 的indptr表示的是一个区间,左开右闭,按照mXn的形状进行区分的,具体是m还是n要看是CSR(m行) 还是CSC(n列) 稀疏矩阵定义 (1)Coordinate (COO) ...

  4. linux csr蓝牙驱动,csr4.0蓝牙适配器驱动下载

    csr4.0蓝牙适配器驱动是一款非常好用的蓝牙驱动程序,它可以帮助用户轻松解决蓝牙无法正常连接的问题,如果你的电脑没有蓝牙的支持,将会造成所有功能都无法正常使用的情况,这款驱动正好能够帮助你解决麻烦. ...

  5. python numpy矩阵索引_python-为什么scipy csr矩阵的行索引比numpy数组...

    我在下面演示的简短答案是,构造新的稀疏矩阵非常昂贵.开销很大,不依赖于行数或特定行中非零元素的数量. 稀疏矩阵的数据表示形式与密集阵列的数据表示形式完全不同.数组将数据存储在一个连续的缓冲区中,并有效 ...

  6. 制作多域名(SAN/UCC)CSR(证书请求文件)

    http://blog.csdn.net/poniu_2008/article/details/7583867 多域名证书,有2种叫法,一种:SAN certificater(SubjectAltNa ...

  7. 关于 SAP Spartacus CSR fallback 之后,是否仍然会继续进行 SSR 的处理

    来自 nguniversal 的 express engine 渲染完了后,渲染完毕的 HTML 源代码保存在 150 行代码 html 里,callback 就是 Spartacus 团队开发的 s ...

  8. SAP Spartacus 在 CSR 模式下启用 SEO HTML tag 的临时方法

    从 page-meta.service.ts 文件 getResolverMethods 方法可以看出: 如果是 SSR 模式,this.platformId 为空,因此生成 meta tag 如果配 ...

  9. SAP Spartacus SSR 模式下 index.html 页面渲染 fallback 到 CSR 之后的执行逻辑

    入口: 当SSR页面不能及时返回时,我们返回index.html: CSR 应用程序 CSR 应用会返回"Cache-Control: no-store"响应头.这将通知外部缓存系 ...

  10. SSR rendering exceeded timeout 3000, fallbacking to CSR for

    当我使用 node dist/jerryssr/server/main.js 时,遇到了如下的提示信息: SSR rendering exceeded timeout 3000, fallbackin ...

最新文章

  1. 【Linux】 Linux简单操作之网络通信和网络访问
  2. 不懂技术的人请不要对懂技术的人说这很容易
  3. CTime,Systemtime的比较还有转换成日期格式。
  4. 利用Android 8.0 ShortcutManager创建桌面快捷图标
  5. uniapp 使用 colorUI
  6. 9种常用的数据分析方法
  7. 进销存excel_excel进销存仓库表格同步手机操作
  8. cdr怎么转plt_win10系统怎么将cdr格式转换成plt?win10将cdr格式转换成plt的方法
  9. 怎么批量修改文件夹名称?
  10. 为什么有些程序员明明很努力,但是却回报很低,收益很小,工资始终上不去-出自中华石杉老师
  11. Hi3519内核配置uart串口
  12. c语言围棋报告,C++围棋程序实现报告.doc
  13. 在代码里设置view的android:layout_marginTop
  14. 和风天气更新数据失败原因分析
  15. 局域网内建网站教程,如何零成本搭建自己的网站?
  16. QQ留言代码,网页QQ留言
  17. 夏日炎炎玩转新加坡:盘点室内景点和夜游好去处
  18. sql 纵向求和_SQL语句(行列转换以及字符串求和)
  19. 国家、省、市、县 四级联动 JS源码
  20. CCIE EI Guestshell

热门文章

  1. cesium---图加载
  2. k图着色 遗传算法的简单python伪代码
  3. 记--Python --日常练习的两种思考方法
  4. iop导出excel,简单例子。
  5. DenseFuse :A Fusion Approach to Infrared and Visible Images解读
  6. 八种酒吧里最IN喝酒法PartyOK版
  7. ryu-manager报错SyntaxError: invalid syntax
  8. 一个软件项目团队的分工
  9. CF850D Tournament Construction
  10. 做网站域名_网站域名