首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【数据结构】数组和字符串(五):特殊矩阵的压缩存储:稀疏矩阵——压缩稀疏行(CSR)

但是对于特殊矩阵,如对称矩阵、三角矩阵、对角矩阵和稀疏矩阵等, 如果用这种方式存储,会出现大量存储空间存放重复信息或零元素的情况,这样会造成很大的空间浪费。...稀疏矩阵的压缩存储——三元组表 【数据结构】数组和字符串(四):特殊矩阵的压缩存储:稀疏矩阵——三元组表 e....CSR存储格式通过压缩非零元素的行指针和列索引,以及存储非零元素的值,来有效地表示稀疏矩阵。...CSR存储格式的主要优点是有效地压缩了稀疏矩阵的存储空间,只存储非零元素及其对应的行和列信息。此外,CSR格式还支持高效的稀疏矩阵向量乘法和稀疏矩阵乘法等操作。...接受一个指向CSR矩阵的指针 matrix,以及要设置的元素的行索引、列索引和值作为参数。 在函数内部,首先检查行索引是否有效,如果无效则打印错误信息并返回。

16410

如何使用python处理稀疏矩阵

如果使用有限的列来可靠地描述某些事物,则通常为给定数据点分配的描述性值已被剪掉,以提供有意义的表示:一个人,一张图像,一个虹膜,房价,潜在的信用风险等。...我们如何更好地表示这些稀疏矩阵?我们需要一种方法来跟踪零不在哪里。那么关于列表,我们在其中一个列中跟踪row,col非零项目的存在以及在另一列中其对应值的情况呢?请记住,稀疏矩阵不必只包含零和一。...只要大多数元素为零,无论非零元素中存在什么,矩阵都是稀疏的。 我们还需要创建稀疏矩阵的顺序, 我们是一行一行地行进,在遇到每个非零元素时存储它们,还是一列一列地进行?...如果我们决定逐行进行,那么刚刚创建了一个压缩的稀疏行矩阵。如果按列,则现在有一个压缩的稀疏列矩阵。方便地,Scipy对两者都支持。 让我们看一下如何创建这些矩阵。...X存储为压缩的稀疏行矩阵。

3.5K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【水了一篇】Scipy简单介绍

    文章目录 1 简介 2 常量模块 3 优化器 4 稀疏矩阵 5 图结构 6 空间数据 ---- 1 简介 Scipy是基于Numpy的科学计算库,用于数学、科学、工程学等领域,很多有一些高阶抽象和物理模型需要使用...优化算法 scipy.signal 信号处理 scipy.sparse 稀疏矩阵 scipy.spatial 空间数据结构和算法 scipy.special 特殊数学函数 scipy/stats 统计函数...---- 4 稀疏矩阵 稀疏矩阵(英语:sparse matrix)指的是在数值分析中绝大多数数值为零的矩阵。反之,如果大部分元素都非零,则这个矩阵是稠密的(Dense)。...上述稀疏矩阵仅包含9个非零元素,另外包含26个零元。SciPy的scipy.sparse模块提供了处理稀疏矩阵的函数。...主要使用以下两种类型的稀疏矩阵: CSC-压缩稀疏列(Compressed Sparse Column),按列压缩。 CSR-压缩稀疏行(Compressed Sparse Row),按行压缩。

    97720

    python的高级数组之稀疏矩阵

    稀疏矩阵的定义: 具有少量非零项的矩阵(在矩阵中,若数值0的元素数目远多于非0元素的数目,并且非0元素分布没有规律时,)则称该矩阵为稀疏矩阵;相反,为稠密矩阵。...Scipy.sparse模块提供了许多来自于稀疏矩阵的不同存储格式。这里仅描述最为重要的格式CSR、CSC和LIL。...CSR、CSC是用于矩阵-矩阵和矩阵-向量运算的有效格式,LIL格式用于生成和更改稀疏矩阵。Python不能自动创建稀疏矩阵,所以要用scipy中特殊的命令来得到稀疏矩阵。...如果整个行i为零,则indptr[i]==indptr[i+1] 如初始矩阵有m行,则len(indptr)==m+1 一维数组Indices(列号:): 其使用如下方式包含列索引信息:indices[...链表稀疏格式在列表数据中以行方式存储非零元素, 列表data: data[k]是行k中的非零元素的列表。如果该行中的所有元素都为0,则它包含一个空列表。

    2.9K10

    【数据结构】数组和字符串(八):稀疏矩阵的链接存储:十字链表的创建、插入元素、遍历打印(按行、按列、打印矩阵)、销毁

    但是对于特殊矩阵,如对称矩阵、三角矩阵、对角矩阵和稀疏矩阵等, 如果用这种方式存储,会出现大量存储空间存放重复信息或零元素的情况,这样会造成很大的空间浪费。...关于循环链表: 【数据结构】线性表(三)循环链表的各种操作(创建、插入、查找、删除、修改、遍历打印、释放内存空间) 在稀疏矩阵的十字链表中,每一行和每一列都有一个表头节点。...对于行表头节点 BASEROW[i],其中 i 表示行号,范围从 1 到 m(矩阵的行数)。如果该行为空(即没有非零元素),则 COL(Loc(BASEROW[i])) 的值为 -1。...free(matrix); } 检查稀疏矩阵指针是否为NULL,如果是,则直接返回。...,如果不是,则打印错误消息并返回。

    24210

    SciPy 稀疏矩阵(3):DOK

    既然如此,是否存在一个方法在不改变存储信息(非零元素的行、列外加上值)的情况下可以降低这一操作的时间复杂度?今天要介绍的 DOK 格式的稀疏矩阵就是这样!...然而,它也有一个缺点,那就是它需要更多的空间来存储链表。总的来说,散列表是一种非常高效的数据结构,它能够快速地查找、插入和删除元素。...如果想存储三元组表示的稀疏矩阵的同时又要确保按照行列索引对元素进行访问的效率高,在存储三元组(非零元素)信息的过程中使用散列表是有必要的。...SciPy DOK 格式的稀疏矩阵 在开始 SciPy DOK 格式的稀疏矩阵之前我花了一些篇幅讲解散列表以及基于散列表的三元组,这主要是因为 SciPy DOK 格式的稀疏矩阵就是基于散列表的三元组。...(零元素改非零元素) 增加关键字和对应值 按照行列索引修改对应值(非零元素改零元素) 删除关键字和对应值 优缺点 SciPy DOK 格式的稀疏矩阵有着以下优点: 一点一点(逐个元素或者逐个矩阵块)

    37850

    SciPy 稀疏矩阵(6):CSC

    “ 上回说到,CSR 格式的稀疏矩阵基于程序的空间局部性原理把当前访问的内存地址以及周围的内存地址中的数据复制到高速缓存或者寄存器(如果允许的话)来对 LIL 格式的稀疏矩阵进行性能优化。...” PART. 01 SciPy CSC 格式的稀疏矩阵 SciPy CSC 格式的稀疏矩阵和 SciPy CSR 格式的稀疏矩阵差不多,属性名都是一样的,唯一不一样的地方就是 SciPy CSC 格式的稀疏矩阵把稀疏矩阵看成有序稀疏列向量组而...,这和 COO 格式的稀疏矩阵处理方式完全一样。...,和 COO 格式的稀疏矩阵差不多。...然而,这个方法并不完美,特别是当重复的行索引的对应值相加之后正好为 0,它根本不会自动去掉这样的零元素,删除零元素还需调用 eliminate_zeros() 方法。

    17410

    推荐系统为什么使用稀疏矩阵?如何使用python的SciPy包处理稀疏矩阵

    这意味着当我们在一个矩阵中表示用户(行)和行为(列)时,结果是一个由许多零值组成的极其稀疏的矩阵。 ? 在真实的场景中,我们如何最好地表示这样一个稀疏的用户-项目交互矩阵?...从数学的角度来看,如果我们有一个100,000 x 100,000矩阵,这将要求我们有100,000 x 100,000 x 8 = 80gb的内存来存储这个矩阵(因为每个double使用8字节)!...SciPy的稀疏模块介绍 在Python中,稀疏数据结构在scipy中得到了有效的实现。稀疏模块,其中大部分是基于Numpy数组。...实现背后的思想很简单:我们不将所有值存储在密集的矩阵中,而是以某种格式存储非零值(例如,使用它们的行和列索引)。...压缩稀疏行(CSR) 尽管在SciPy中有很多类型的稀疏矩阵,比如键的字典(DOK)和列表的列表(LIL),但我只讨论压缩稀疏行(CSR),因为它是最常用和最广为人知的格式。

    2.7K20

    稀疏矩阵的压缩方法

    但是,对于稀疏矩阵而言,因为存在大量的零元素,每个零元素都要存储和参与运算,这样会造成大量的冗余和浪费。...从而实现了对原有稀疏矩阵的压缩。从图2-6-3中,能够更直观地了解上述压缩过程和效果。...在SciPy库中,提供了多种针对稀疏矩阵类(https://docs.scipy.org/doc/scipy/reference/sparse.html),分别实现不同的压缩方式: 类名称 说明 bsr_matrix...对分块稀疏矩阵按行压缩 coo_matrix 坐标格式的稀疏矩阵 csc_matrix 压缩系数矩阵 csr_matrix 按行压缩 dia_matrix 压缩对角线为非零元素的稀疏矩阵 dok_matrix...字典格式的稀疏矩阵 lil_matrix 基于行用列表保存稀疏矩阵的非零元素 下面以csr_matrix为例进行演示。

    5.2K20

    SciPy 稀疏矩阵(2):COO

    然而,我们都知道在稀疏矩阵中零元素的分布通常情况下没有什么规律,因此仅仅存储非零元素的值是不够的,我们还需要非零元素的其他信息,具体需要什么信息很容易想到:考虑到在矩阵中的每一个元素不仅有值,同时对应的信息还有矩阵的行和列...与此同时,针对稀疏矩阵类我们还可以添加一些功能,比如获取矩阵的行和列、多个三元组的行索引外加上列索引均重复该如何处理等等。...与此同时,针对稀疏矩阵类我们还可以添加一些功能,比如获取矩阵的行和列、多个三元组的行索引外加上列索引均重复该如何处理等等。...SciPy COO 格式的稀疏矩阵 在开始 SciPy COO 格式的稀疏矩阵之前我花了一些篇幅讲解稀疏矩阵的三元组存储策略,这主要是因为 SciPy COO 格式的稀疏矩阵用的存储策略就是三元组存储策略的第...在 SciPy COO 格式的稀疏矩阵中,行索引序列的属性名就是 row,列索引序列的属性名就是 col,元素值序列的属性名就是 data。

    32620

    scipy.sparse、pandas.sparse、sklearn稀疏矩阵的使用

    单机环境下,如果特征较为稀疏且矩阵较大,那么就会出现内存问题,如果不上分布式 + 不用Mars/Dask/CuPy等工具,那么稀疏矩阵就是一条比较容易实现的路。...: SciPy 稀疏矩阵笔记 Sparse稀疏矩阵主要存储格式总结 Python数据分析----scipy稀疏矩阵 1.1 SciPy 几种稀疏矩阵类型 SciPy 中有 7 种存储稀疏矩阵的数据结构...: 如果想创建一个新的稀疏矩阵,lil_matrix,dok_matrix和coo_matrix会比高效,但是它们不适合做矩阵运算。...如果想做矩阵运算,例如矩阵乘法、求逆等,应该用 CSC 或者 CSR 类型的稀疏矩阵。...(j) # 返回矩阵列j的一个拷贝,作为一个(mx 1) 稀疏矩阵 (列向量) mat.getrow(i) # 返回矩阵行i的一个拷贝,作为一个(1 x n) 稀疏矩阵 (行向量) mat.nonzero

    1.8K10

    【学术】一篇关于机器学习中的稀疏矩阵的介绍

    AiTechYun 编辑:Yining 在矩阵中,如果数值为0的元素数目远远多于非0元素的数目,并且非0元素分布无规律时,则称该矩阵为稀疏矩阵;与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵。...还有一些更适合执行高效操作的数据结构;下面列出了两个常用的示例。 压缩的稀疏行。稀疏矩阵用三个一维数组表示非零值、行的范围和列索引。 压缩的稀疏列。...与压缩的稀疏行方法相同,除了列索引外,在行索引之前被压缩和读取。 被压缩的稀疏行,也称为CSR,通常被用来表示机器学习中的稀疏矩阵,因为它支持的是有效的访问和矩阵乘法。...许多在NumPy阵列上运行的线性代数NumPy和SciPy函数可以透明地操作SciPy稀疏数组。...你可能会在数据、数据准备和机器学习的子领域中遇到稀疏矩阵。 有许多有效的方法可以存储和使用稀疏矩阵,而SciPy提供了你可以直接使用的实现。 ?

    3.8K40

    SciPy 稀疏矩阵(4):LIL(上)

    矩阵是有序向量组:矩阵是数学中的基本概念之一,它是一个由数字组成的矩形阵列。在形式上,矩阵是由若干行和若干列组成的,每一行和每一列都有一定的顺序。这个顺序就决定了矩阵是一个有序向量组。...与此同时,针对稀疏矩阵类我们还可以添加一些功能,比如获取矩阵的行和列等等。...与此同时,针对稀疏矩阵类我们还可以添加一些功能,比如获取矩阵的行和列等等。...SciPy LIL 格式的稀疏矩阵 在开始 SciPy LIL 格式的稀疏矩阵之前我花了一些篇幅讲解稀疏向量的二元组存储策略外加上基于稀疏向量的稀疏矩阵的存储策略,这主要是因为 SciPy LIL 格式的稀疏矩阵用的存储策略就是基于稀疏向量的稀疏矩阵的存储策略的第...) 有序顺序表的二分查找(找到并删除) O(n) 通过上表,理解为什么 SciPy 官方文档为什么说 LIL 格式的稀疏矩阵插入一个元素(零元素改非零元素)的最坏时间复杂度是 O(n) 就非常简单了。

    24210

    稀疏矩阵的概念介绍

    有两种常见的矩阵类型,密集和稀疏。主要区别在于稀疏指标有很多零值。密集的指标没有。这是一个具有 4 列和 4 行的稀疏矩阵的示例。 在上面的矩阵中,16 个中有 12 个是零。...这就引出了一个简单的问题: 我们可以在常规的机器学习任务中只存储非零值来压缩矩阵的大小吗? 简单的答案是:是的,可以! 我们可以轻松地将高维稀疏矩阵转换为压缩稀疏行矩阵(简称 CSR 矩阵)。...但是稀疏矩阵的一个主要缺点是访问单个元素变得更加复杂。下面可以为选择不同的方法提供一些参考: 如果关心的是高效修改 - 使用 DOK、LIL 或 COO。这些通常用于构建矩阵。...如果关心的是有效的访问和矩阵操作 - 使用 CSR 或 CSC 上面说到了很多名词为简单起见我们深入研究一个CSR的示例。考虑下面的矩阵。 将上述矩阵转换为 CSR 矩阵的情况。...在函数内部它的 dtype 将被转换为 dtype = np.float32。如果提供了稀疏矩阵,则将其转换为稀疏的 csc_matrix。 让我们继续使用数据集进行实验。

    1.1K30

    稀疏矩阵的概念介绍

    什么是稀疏矩阵? 有两种常见的矩阵类型,密集和稀疏。主要区别在于稀疏指标有很多零值。密集的指标没有。这是一个具有 4 列和 4 行的稀疏矩阵的示例。 在上面的矩阵中,16 个中有 12 个是零。...但是稀疏矩阵的一个主要缺点是访问单个元素变得更加复杂。下面可以为选择不同的方法提供一些参考: 如果关心的是高效修改 - 使用 DOK、LIL 或 COO。...这些通常用于构建矩阵; 如果关心的是有效的访问和矩阵操作 - 使用 CSR 或 CSC。 上面说到了很多名词为简单起见我们深入研究一个CSR的示例。考虑下面的矩阵。...将上述矩阵转换为 CSR 矩阵的情况。在这里使用的是 scipy包的sparsemodule。...在函数内部它的 dtype 将被转换为 dtype = np.float32。如果提供了稀疏矩阵,则将其转换为稀疏的 csc_matrix。 让我们继续使用数据集进行实验。

    1.7K20

    SciPy 稀疏矩阵(5):CSR

    因此,获取 LIL 格式的稀疏矩阵中的某一行(第 i 行)的非零元素的列索引和元素值只需要分别访问 rows 属性(数组)第 i 个元素(动态数组)和 data 属性(数组)的第 i 个元素(动态数组)...part 05、SciPy CSR 格式的稀疏矩阵 BETTER LIFE SciPy CSR 格式的稀疏矩阵就是如上图所示的新数据结构,属性名也是一样的,唯一的不一样只有一个,就是 indptr 属性...实例化 SciPy CSR 格式的稀疏矩阵类的定义位于 scipy.sparse 包中的 csr_matrix 类,对其进行实例化就能获取一个 SciPy CSR 格式的稀疏矩阵的实例。...最后还是通过第 5 种实例化方法实例化一个稀疏矩阵,但是这里很明显和之前不一样的地方就是它第 1 行的列索引存在重复,出现了 2 次 0,在这里处理的方式是把一行中重复列索引的对应值相加,和 COO 格式的稀疏矩阵差不多...part 06、下回预告 BETTER LIFE 不同于 LIL 格式的稀疏矩阵把相邻两行的非零元素的列索引和元素值存储在内存的不同位置,CSR 格式的稀疏矩阵中相邻两行的非零元素的列索引和元素值在内存中是紧密相连的

    16510

    简约而不简单|值得收藏的Numpy小抄表(含主要语法、代码)

    Numpy是一个用python实现的科学计算的扩展程序库,包括: 1、一个强大的N维数组对象Array; 2、比较成熟的(广播)函数库; 3、用于整合C/C++和Fortran代码的工具包; 4、实用的线性代数...numpy和稀疏矩阵运算包scipy配合使用更加方便。 NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。...小技巧 基础 NumPy最常用的功能之一就是NumPy数组:列表和NumPy数组的最主要区别在于功能性和速度。...reshape 改变数组的维数 https://docs.scipy.org/doc/stable/reference/generated/numpy.reshape.html squeeze 从数组的形状中删除单维度条目...https://numpy.org/doc/stable/reference/generated/numpy.transpose.html inverse = np.linalg.inv(matrix) 求矩阵的逆矩阵

    47110

    气象编程|值得收藏的Numpy小抄表(含主要语法、代码)

    Numpy是一个用python实现的科学计算的扩展程序库,包括: 1、一个强大的N维数组对象Array; 2、比较成熟的(广播)函数库; 3、用于整合C/C++和Fortran代码的工具包; 4、实用的线性代数...numpy和稀疏矩阵运算包scipy配合使用更加方便。 NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。...小技巧 基础 NumPy最常用的功能之一就是NumPy数组:列表和NumPy数组的最主要区别在于功能性和速度。...reshape 改变数组的维数 https://docs.scipy.org/doc/stable/reference/generated/numpy.reshape.html squeeze 从数组的形状中删除单维度条目...https://numpy.org/doc/stable/reference/generated/numpy.transpose.html inverse = np.linalg.inv(matrix) 求矩阵的逆矩阵

    59820

    机器学习基础与实践(二)——数据转换

    scalers接受压缩的稀疏行(Compressed Sparse Rows)和压缩的稀疏列(Compressed Sparse Columns)的格式(具体参考scipy.sparse.csr_matrix...如果数据很小,可以在稀疏矩阵上运用toarray 方法。 2.4 对离群点进行标准化 如果你的数据有离群点(上一篇我们提到过),对数据进行均差和方差的标准化效果并不好。...注:稀疏数据输入: normalize 和 Normalizer 既接受稠密数据(dense array-like),也接受稀疏矩阵(from scipy.sparse)作为输入 稀疏数据需要转换成压缩的稀疏行...注:稀疏数据输入: binarize 和 Binarizer 既接受稠密数据(dense array-like),也接受稀疏矩阵(from scipy.sparse)作为输入 稀疏数据需要转换成压缩的稀疏行...但是以下四种情况,计算设置的copy = Fasle,也会创建一个副本: 1.X不是浮点型数组2.X是稀疏矩阵,而且miss_value = 0 3.axis= 0,X被编码为CSR矩阵 4.axis=

    1.6K60

    简约而不简单|值得收藏的Numpy小抄表(含主要语法、代码)

    Numpy是一个用python实现的科学计算的扩展程序库,包括: 1、一个强大的N维数组对象Array; 2、比较成熟的(广播)函数库; 3、用于整合C/C++和Fortran代码的工具包; 4、实用的线性代数...numpy和稀疏矩阵运算包scipy配合使用更加方便。 NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。...小技巧 基础 NumPy最常用的功能之一就是NumPy数组:列表和NumPy数组的最主要区别在于功能性和速度。...reshape 改变数组的维数 https://docs.scipy.org/doc/stable/reference/generated/numpy.reshape.html squeeze 从数组的形状中删除单维度条目...https://numpy.org/doc/stable/reference/generated/numpy.transpose.html inverse = np.linalg.inv(matrix) 求矩阵的逆矩阵

    73230
    领券