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

如何使用python处理稀疏矩阵

大多数机器学习从业者习惯于在将数据输入机器学习算法之前采用其数据集的矩阵表示形式。矩阵是一种理想的形式,通常用行表示数据集实例,用列表示要素。 稀疏矩阵是其中大多数元件是零矩阵。...这与稠密矩阵相反,稠密矩阵元素多。 ? 通常,我们的数据是密集的,拥有的每个实例填充特征列。...我们如何更好地表示这些稀疏矩阵?我们需要一种方法来跟踪零不在哪里。那么关于列表,我们在其中一个列中跟踪row,col非零项目的存在以及在另一列中其对应值的情况呢?请记住,稀疏矩阵不必只包含零和一。...只要大多数元素为零,无论非零元素中存在什么,矩阵都是稀疏的。 我们还需要创建稀疏矩阵的顺序, 我们是一行一行地行进,在遇到每个非零元素时存储它们,还是一列一列地进行?...如果我们决定逐行进行,那么刚刚创建了一个压缩的稀疏行矩阵。如果按列,则现在有一个压缩的稀疏列矩阵。方便地,Scipy对两者都支持。 让我们看一下如何创建这些矩阵。

3.5K30

SciPy 稀疏矩阵(6):CSC

” PART. 01 SciPy CSC 格式的稀疏矩阵 SciPy CSC 格式的稀疏矩阵和 SciPy CSR 格式的稀疏矩阵差不多,属性名都是一样的,唯一不一样的地方就是 SciPy CSC 格式的稀疏矩阵把稀疏矩阵看成有序稀疏列向量组而...SciPy CSR 格式的稀疏矩阵把稀疏矩阵看成有序稀疏行向量组。...优缺点 SciPy CSC 格式的稀疏矩阵有着以下优点: 进行算术操作的性能非常高效。 进行列切片操作的性能非常高效。 进行矩阵乘向量运算的操作特别迅速。...当然,SciPy CSC 格式的稀疏矩阵也有缺点: 进行行切片操作的性能非常低下。 对其修改矩阵元素的代价非常高昂。...PART. 02 下回预告 不同于 LIL 格式和 CSR 格式都是把稀疏矩阵看成有序稀疏行向量组,然后对行向量组中每一个行向量进行压缩存储,CSC 格式把稀疏矩阵看成有序稀疏列向量组,然后通过模仿 CSR

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

    SciPy 稀疏矩阵(5):CSR

    如图所示,我们可以发现 LIL 格式的稀疏矩阵虽然可以快速获取某一行的信息,但是它任意相邻两行的非零元素的列索引以及对应元素值并不是存储在一段连续的内存空间中,换句话说就是当缓存中的第 i 行非零元素的信息即将用完的时候...实例化 SciPy CSR 格式的稀疏矩阵类的定义位于 scipy.sparse 包中的 csr_matrix 类,对其进行实例化就能获取一个 SciPy CSR 格式的稀疏矩阵的实例。...这 2 个方法都是原地操作,无返回值。现在方法有了,怎么消除零元素以及重复的列索引无非就是两个方法的调用顺序的问题。显然我们应该先消除重复的列索引,再消除零元素。...优缺点 SciPy CSR 格式的稀疏矩阵有着以下优点: 进行算术操作的性能非常高效。 进行行切片操作的性能非常高效。 进行矩阵乘向量运算的操作非常迅速。...当然,SciPy CSR 格式的稀疏矩阵也有缺点: 进行列切片操作的性能非常低下。 对其修改矩阵元素的代价非常高昂。

    16610

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

    稀疏的问题 稀疏矩阵会导致空间复杂度和时间复杂度的问题。 空间复杂度 非常大的矩阵需要大量的内存,而我们想要处理的一些非常大的矩阵是稀疏的。...在实践中,大多数大型矩阵都是稀疏的——几乎所有的项都为零。 —第465页,《线性代数介绍》(Introduction to Linear Algebra),第五版,2016年。...一个更小的稀疏矩阵的例子可能是一个单词或术语的出现矩阵,在一本书中与所有已知的英语单词对应。 在这两种情况下,所包含的矩阵都是稀疏的,其零值比数据值要多。...还有一些更适合执行高效操作的数据结构;下面列出了两个常用的示例。 压缩的稀疏行。稀疏矩阵用三个一维数组表示非零值、行的范围和列索引。 压缩的稀疏列。...与压缩的稀疏行方法相同,除了列索引外,在行索引之前被压缩和读取。 被压缩的稀疏行,也称为CSR,通常被用来表示机器学习中的稀疏矩阵,因为它支持的是有效的访问和矩阵乘法。

    3.8K40

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

    这意味着当我们在一个矩阵中表示用户(行)和行为(列)时,结果是一个由许多零值组成的极其稀疏的矩阵。 ? 在真实的场景中,我们如何最好地表示这样一个稀疏的用户-项目交互矩阵?...实现背后的思想很简单:我们不将所有值存储在密集的矩阵中,而是以某种格式存储非零值(例如,使用它们的行和列索引)。...压缩稀疏行(CSR) 尽管在SciPy中有很多类型的稀疏矩阵,比如键的字典(DOK)和列表的列表(LIL),但我只讨论压缩稀疏行(CSR),因为它是最常用和最广为人知的格式。...为了有效地表示稀疏矩阵,CSR使用三个numpy数组来存储一些相关信息,包括: data(数据):非零值的值,这些是存储在稀疏矩阵中的非零值 indices(索引):列索引的数组,从第一行(从左到右)开始...)) 注意,我们不应该创建一个空的稀疏矩阵,然后填充它们,因为csr_matrix被设计为一次写、一次读多。

    2.7K20

    稀疏矩阵的压缩方法

    说明: 稀疏矩阵是机器学习中经常遇到的一种矩阵形式,特别是当矩阵行列比较多的时候,本着“节约”原则,必须要对其进行压缩。本节即演示一种常用的压缩方法,并说明其他压缩方式。...由此,就要修改矩阵的表示形式,只记录非零元素及其位置,没有记录的位置,都是零元素,这就是矩阵压缩。...★矩阵压缩的基本原则: 不重复存储相同元素 不存储零元素 下面详细介绍一种压缩稀疏行(Compressed Sparse Row,CSR)的矩阵压缩方法。...,则为: 按照上表和矩阵,可以得到三个文档中的每个单词出现的列索引,即矩阵中非零元素对应的列索引,组成一个列表: ind = [0, 1, 0, 1, 2, 3, 4, 5, 3, 4, 6, 7]...,从输出信息可知,其中保存了 个元素,也就意味着对应的稀疏矩阵中都是零元素。

    5.2K20

    【调研】GPU矩阵乘法的性能预测——Machine Learning Approach for Predicting The Performance of SpMV on GPU

    第一种是基于坐标的存储形式,也是最基本、最常见的一种格式。         他使用3个一维的数组来标识稀疏矩阵,分别是非零元素、元素行坐标和列坐标。         ...一般主要用来创建矩阵,然后转为其他格式。 图片         按行对矩阵进行压缩的CSR格式也采用3个一维数组来标识矩阵,分别为非零元素、元素列坐标以及前几行非零元素的数量。         ...第二个矩阵用来存非零元素的列索引。         可以看到,由于他存在零填充原则,因此可能会需要很大的内存空间。         第四种格式HYB,结合了ELL和COO两种方式。...该指标提供了一种简单的方法来描述由对乘向量的随机访问所导致的缓存错过级别。它也被用于作为稀疏矩阵非零元素弥散程度的有效指标。         ...该指标提供了一种简单的方法来描述由对乘向量的随机访问所导致的缓存错过级别。它也被用于作为稀疏矩阵非零元素弥散程度的有效指标。

    1.7K20

    稀疏矩阵的概念介绍

    来源:DeepHub IMBA本文约2700字,建议阅读9分钟本文为你介绍一种既能够保存信息,又节省内存的方案:我们称之为“稀疏矩阵”。...什么是稀疏矩阵? 有两种常见的矩阵类型,密集和稀疏。主要区别在于稀疏指标有很多零值。密集的指标没有。这是一个具有 4 列和 4 行的稀疏矩阵的示例。 在上面的矩阵中,16 个中有 12 个是零。...将上述矩阵转换为 CSR 矩阵的情况。在这里使用的是 scipy包的sparsemodule。...这意味着,超过 90% 的数据点都用零填充。回到最上面的图,这就是上面我们看到为什么pandas占用内存多的原因。 我们为什么要关心稀疏矩阵? 好吧,使用稀疏矩阵有很多很好的理由。...sklearn API 中的几乎所有算法现在都支持 csr_matrix 作为输入,这是一个非常好的消息。

    1.7K20

    稀疏矩阵的概念介绍

    所以科学家们找到的一种既能够保存信息,又节省内存的方案:我们称之为“稀疏矩阵”。 背景 Pandas的DataFrame 已经算作机器学习中处理数据的标配了 ,那么稀疏矩阵的真正需求是什么?...有两种常见的矩阵类型,密集和稀疏。主要区别在于稀疏指标有很多零值。密集的指标没有。这是一个具有 4 列和 4 行的稀疏矩阵的示例。 在上面的矩阵中,16 个中有 12 个是零。...这就引出了一个简单的问题: 我们可以在常规的机器学习任务中只存储非零值来压缩矩阵的大小吗? 简单的答案是:是的,可以! 我们可以轻松地将高维稀疏矩阵转换为压缩稀疏行矩阵(简称 CSR 矩阵)。...这意味着,超过 90% 的数据点都用零填充。回到嘴上面的图,这就是上面我们看到为什么pandas占用内存多的原因。 我们为什么要关心稀疏矩阵? 好吧,使用稀疏矩阵有很多很好的理由。...sklearn API 中的几乎所有算法现在都支持 csr_matrix 作为输入,这是一个非常好的消息 例如下面:这是来自 sklearn.ensemble.RandomForestClassifier

    1.1K30

    python的高级数组之稀疏矩阵

    Scipy.sparse模块提供了许多来自于稀疏矩阵的不同存储格式。这里仅描述最为重要的格式CSR、CSC和LIL。...CSR、CSC是用于矩阵-矩阵和矩阵-向量运算的有效格式,LIL格式用于生成和更改稀疏矩阵。Python不能自动创建稀疏矩阵,所以要用scipy中特殊的命令来得到稀疏矩阵。...CSR使用了三个数组,分别为数值、行偏移(表示某一行的第一个元素在数值里面的起始偏移位置,在行偏移的最后补上矩阵总的元素个数)、列号。...CSR是一种编码的方式 一维数组data(数值):有序地存储了所有的非零值,它具有与非零元素同样多数量的元素,通常由变量nnz表示。...Len(indice)==len(data)==nnz 备注:列索引表示数值所在的列号,从0开始。 数组data:包含矩阵中的非零元素,以行优先的形式保存。

    2.9K10

    SciPy 稀疏矩阵(3):DOK

    这种直接访问的特性使得散列表在处理查询操作时非常高效。因此,无论是进行数据检索、缓存操作,还是实现关联数组,散列表都是一种非常有用的工具。...然而,它也有一个缺点,那就是它需要更多的空间来存储链表。总的来说,散列表是一种非常高效的数据结构,它能够快速地查找、插入和删除元素。...然而,无论采用上述的哪一种方法来表示稀疏矩阵都不能在时间复杂度为 O(1) 的情况下按照行列索引对元素进行访问。...考虑到散列表是按照键来快速计算(时间复杂度 O(1))出对应值的内存地址,然后按照内存地址读取对应的值;又因为对于一个矩阵的元素访问操作而言,我们都是根据行列索引来获取对应位置的值。...地构造稀疏矩阵的效率非常高 按照行列索引访问或者修改元素的时间复杂度为 O(1) 切片操作灵活且高效 改变非零元素的分布的效率非常高 转换为 COO 格式的稀疏矩阵的效率非常高 当然,SciPy DOK

    37850

    SciPy 稀疏矩阵(2):COO

    然而,我们都知道在稀疏矩阵中零元素的分布通常情况下没有什么规律,因此仅仅存储非零元素的值是不够的,我们还需要非零元素的其他信息,具体需要什么信息很容易想到:考虑到在矩阵中的每一个元素不仅有值,同时对应的信息还有矩阵的行和列...三元组的存储策略 如果存储一个稀疏矩阵对应的多个三元组可以有非常多的实现方式,针对每一种都进行讲解是非常不现实的,而且完全没有这个必要,因为三元组的存储策略可以分为 2 大类:三元组容器法以及三个序列法...这 2 个方法都是原地操作,无返回值。现在方法有了,怎么消除零元素以及重复的行列索引无非就是两个方法的调用顺序的问题。显然我们应该先消除重复的行列索引,再消除零元素。...COO 格式的稀疏矩阵有着以下优点: 有利于各种稀疏矩阵格式的快速转换。...无法直接支持算术运算(进行算术运算之前通常会隐式地构造其他格式的稀疏矩阵,一般来说基本上都是 CSR 格式或者 CSC 格式)。

    32620

    SciPy 稀疏矩阵(1):介绍

    因此,学习和掌握 SciPy 稀疏矩阵是非常有必要的。 稀疏矩阵 稀疏矩阵是指矩阵中大部分元素为零的矩阵。在实际应用中,很多矩阵都是稀疏矩阵。...例如,在图像处理领域中,采用的是灰度图像处理,每个像素点只有一个强度值,而大部分像素点的强度值都为零,这就是一种典型的稀疏矩阵。...由于稀疏矩阵中大部分元素都是零,因此对其进行存储和计算时,需要采用特殊的算法和存储方法,以达到更高的效率。...显然,存储稀疏矩阵中的所有零元素非常浪费计算机的存储空间,甚至有的时候这是极其不现实的,因此,我们只存储矩阵中的非零元素。...言归正传,我提出的 SciPy 稀疏矩阵的学习路线我自己不敢说是全网门槛最低、最容易的教程,但是比它门槛更低、更容易的教程真的非常难找到。

    29210

    【水了一篇】Scipy简单介绍

    SciPy包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。...---- 4 稀疏矩阵 稀疏矩阵(英语:sparse matrix)指的是在数值分析中绝大多数数值为零的矩阵。反之,如果大部分元素都非零,则这个矩阵是稠密的(Dense)。...上述稀疏矩阵仅包含9个非零元素,另外包含26个零元。SciPy的scipy.sparse模块提供了处理稀疏矩阵的函数。...主要使用以下两种类型的稀疏矩阵: CSC-压缩稀疏列(Compressed Sparse Column),按列压缩。 CSR-压缩稀疏行(Compressed Sparse Row),按行压缩。...通过向scipy.sparse.csr_matrix()函数传递数组来创建一个CSR矩阵: >>> import numpy as np >>> from scipy.sparse import csr_matrix

    97720

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

    或者将最大的绝对值缩放至单位大小,可用MaxAbsScaler实现。 使用这种标准化方法的原因是,有时数据集的标准差非常非常小,有时数据中有很多很多零(稀疏数据)需要保存住0元素。...这意味着数据已经以0为中心或者是含有非常非常多0的稀疏数据。 ?...scalers接受压缩的稀疏行(Compressed Sparse Rows)和压缩的稀疏列(Compressed Sparse Columns)的格式(具体参考scipy.sparse.csr_matrix...(Compressed Sparse Rows)格式(详见scipy.sparse.csr_matrix),为了避免不必要的内存拷贝,推荐使用CSR。...(Compressed Sparse Rows)格式(详见scipy.sparse.csr_matrix),为了避免不必要的内存拷贝,推荐使用CSR。

    1.6K60

    【python语言学习】(一)向量、矩阵和数组

    (●’◡’●)表示只有零星非零值的数据 稀疏矩阵只保存非零元素并假设剩余元素的值都是零,节省大量的计算成本 稀疏行(CSR) 下标的编号从0开始 Scipy #加载库 import numpy as...np from scipy import sparse #创建一个矩阵 matrix = np.array([[0, 0], [0, 1],...[3, 0]]) #创建一个压缩的稀疏行(Compressed Sparse Row,CSR)矩阵 matrix_sparse = sparse.csr_matrix(matrix) 1.4选择元素 (...#选取第3个元素之后的所有元素 print(vector[3:]) #选取最后1个元素 print(vector[-1]) #选取矩阵的第1行和第2行以及所有列 print(matrix[:2,:])...print('--------') #选取所有行以及第二列 【注意】 print(matrix[:,1:2]) 1.5展示一个矩阵的属性 (●’◡’●)展示一个矩阵的形状、大小和维数 import

    52010

    SciPy 下

    终止条件:任何金融产品都是支付函数,可设为 PDE 的终止条件 边界条件:很多金融产品的支付在标的很大或很小时会确定比如看涨期权 在标的为零时支付为零 在标的很大时近似为一个远期。...在 PDE FD 中用到了稀疏矩阵 (sparse matrix),这个算是 SciPy 中最有内容的知识点之一。和稠密矩阵相比,稀疏矩阵的最大好处就是节省大量的内存空间来储存零。...稀疏矩阵本质上还是矩阵,只不过多数位置是空的,那么存储所有的 0 非常浪费。...稀疏矩阵的存储机制有很多种 (列出常用的五种): COO (Coordinate List Format):座标格式,容易创建但是不便于矩阵计算,用 coo_matrix CSR (Compressed...Sparse Row): 压缩行格式,不容易创建但便于矩阵计算,用 csr_matri CSC (Compressed Sparse Column): 压缩列格式,不容易创建但便于矩阵计算,用 csc_matrix

    69040

    章神的私房菜之数据预处理

    例如,在一个机器学习的目标函数中使用的许多元素被假设为以零为中心并且在相同的阶上具有相同的方差。...然而, scale 和 StandardScaler可以接受scipy.sparse矩阵作为输入,只要with_mean=False显试的传递给了构造函数。否则一个ValueError异常将会被抛出。...注意,缩放类既接受被压缩的行稀疏矩阵又接受被压缩的列稀疏的矩阵结构(参看scipy.sparse.csr_matrix 和 scipy.sparse.csc_matrix)。...最后,如果希望中心化的数据足够小,那么一个可选的方案就是可以使用稀疏矩阵的toarray方法来将输入转化成一个矩阵。...他们使用更鲁棒的方法来估计数据的中心和范围。 ---- 三、归一化: 归一化是将单个的样本缩放到统一规范的处理过程。

    756100
    领券