C++ 实现稀疏矩阵的压缩存储的实例
稀疏矩阵:M*N的矩阵,矩阵中有效值的个数远小于无效值的个数,且这些数据的分布没有规律。
稀疏矩阵的压缩存储:压缩存储值存储极少数的有效数据。使用{row,col,value}三元组存储每一个有效数据,三元组按原矩阵中的位置,以行优先级先后顺序依次存放。
实现代码:
#include <iostream> #include <vector> using namespace std; template<class T> struct Triple //三元组 { size_t _row; //行 size_t _col; //列 T _value; //值 Triple(size_t row, size_t col, const T& value) :_row(row) , _col(col) , _value(value) {} }; template<class T> class SparseMatrix //稀疏矩阵 { protected: vector<Triple<T>> _matrix; //可以实现动态增容的压缩矩阵 size_t _m; //行 size_t _n; //列 T _invalid; //默认值 public: SparseMatrix(T* a, size_t m, size_t n, const T& invalid= T()) :_m(m) , _n(n) , _invalid(invalid) { for (size_t i = 0; i < m; ++i) { for (size_t j = 0; j < n; ++j) { Triple<T> t(i, j, a[i*n + j]); _matrix.push_back(t); } } } void Display() { size_t index = 0; for (size_t i = 0; i < _m; ++i) { for (size_t j = 0; j < _n; ++j) { if (index < _matrix.size() && _matrix[index]._row== i &&_matrix[index]._col ==j) { cout << _matrix[index]._value << " "; ++index; } else { cout << _invalid << " "; } } cout << endl; } cout << endl; } };
#include <windows.h> void test() { int a[6][5] = { { 1, 0, 2, 0, 0 }, { 1, 0, 1, 0, 3 }, { 2, 0, 0, 1, 2 }, { 3, 0, 1, 0, 0 }, { 4, 0, 2, 0, 0 }, { 0, 3, 4, 0, 0 }, }; SparseMatrix<int> sm((int*)a, 6, 5, 0); //SymmetricMatrix(int a[][N], size_t N) sm.Display(); } int main() { test(); system("pause"); return 0; }
以上就是稀疏矩阵的压缩存储的实例详解,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
本文向大家介绍C语言实现稀疏矩阵,包括了C语言实现稀疏矩阵的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C语言实现稀疏矩阵的具体代码,供大家参考,具体内容如下 效果图: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
本文向大家介绍C++ 数据结构之对称矩阵及稀疏矩阵的压缩存储,包括了C++ 数据结构之对称矩阵及稀疏矩阵的压缩存储的使用技巧和注意事项,需要的朋友参考一下 对称矩阵及稀疏矩阵的压缩存储 1.稀疏矩阵 对于那些零元素数目远远多于非零元素数目,并且非零元素的分布没有规律的矩阵称为稀疏矩阵(sparse)。 人们无法给出稀疏矩阵的确切定义,一般都只是凭个人的直觉来理解这个概念,即矩阵中非零元素的个
主要内容:对称矩阵,上(下)三角矩阵,稀疏矩阵,矩阵压缩存储的 3 种方式数据结构中,提供针对某些特殊矩阵的压缩存储结构。 这里所说的特殊矩阵,主要分为以下两类: 含有大量相同数据元素的矩阵,比如对称矩阵; 含有大量 0 元素的矩阵,比如稀疏矩阵、上(下)三角矩阵; 针对以上两类矩阵,数据结构的压缩存储思想是:矩阵中的相同数据元素(包括元素 0)只存储一个。 对称矩阵 图 1 对称矩阵示意图 图 1 的矩阵中,数据元素沿主对角线对应相等,这类矩阵称为 对称矩阵。 矩阵中
问题内容: 我在用PyTables存储numpy csr_matrix时遇到问题。我收到此错误: 我的代码: 有任何想法吗? 谢谢 问题答案: 一个CSR矩阵可以从它的完全重建,和属性。这些只是常规的numpy数组,因此将它们作为3个单独的数组存储在pytables中,然后将它们传递回的构造函数应该没有问题。请参阅scipy文档。 编辑: Pietro的答案已指出该成员也应存储
本文向大家介绍Python使用稀疏矩阵节省内存实例,包括了Python使用稀疏矩阵节省内存实例的使用技巧和注意事项,需要的朋友参考一下 推荐系统中经常需要处理类似user_id, item_id, rating这样的数据,其实就是数学里面的稀疏矩阵,scipy中提供了sparse模块来解决这个问题,但scipy.sparse有很多问题不太合用: 1、不能很好的同时支持data[i, ...]、da
稀疏矩阵(Sparse Matrix) 注:压缩存储的矩阵可以分为特殊矩阵和稀疏矩阵。对于那些具有相同元素或零元素在矩阵中分布具有一定规律的矩阵,被称之为特殊矩阵。对于那些零元素数据远远多于非零元素数目,并且非零元素的分布没有规律的矩阵称之为稀疏矩阵。 1. 稀疏矩阵的概念 在矩阵中,若数值为0的元素数目远远多于非0元素的数目时,则称该矩阵为稀疏矩阵。与之相反,若非0元素数目占大多数时,则称该矩阵