为什么我们不能只使用Numpy数组或panda数据流呢? 要理解这一点,我们必须理解计算的两个主要约束——时间和内存。前者就是我们所知道的“程序运行所需的时间”,而后者是“程序使用了多少内存”。...空间复杂度 当处理稀疏矩阵时,将它们存储为一个完整的矩阵(从这里开始称为密集矩阵)是非常低效的。这是因为一个完整的数组为每个条目占用一块内存,所以一个n x m数组需要n x m块内存。...为了有效地表示稀疏矩阵,CSR使用三个numpy数组来存储一些相关信息,包括: data(数据):非零值的值,这些是存储在稀疏矩阵中的非零值 indices(索引):列索引的数组,从第一行(从左到右)开始...用数据创建一个稀疏矩阵 # method 1 # format: csr_matrix((data, (row_ind, col_ind)), [shape=(M, N)]) # where a[...), [shape=(M, N)]) # column indices for row i: indices[indptr[i]:indptr[i+1]] # data values: data[indptr
csc_matrix((M, N), [dtype]):会实例化一个 M 行 N 列元素类型为 dtype 的全 0 矩阵。dtype 是一个可选参数,默认值为双精度浮点数。...csc_matrix((data, (row_ind, col_ind)), [shape=(M, N)]):data 是非零元素值,row_ind 是非零元素行索引,col_ind 是非零元素的列索引...,shape 是矩阵的行列数(M 行 N 列),默认会通过非零元素行索引外加上非零元素列索引进行推断。...csc_matrix((data, indices, indptr), [shape=(M, N)]):第 i 列非零元素的行索引是 indices[indptr[i]:indptr[i+1]],对应的非零元素值存储在...data[indptr[i]:indptr[i+1]],shape 是矩阵的行列数(M 行 N 列),默认会通过 indices 和 indptr 进行推断。
其中:indptr参数,0表示默认起始点,0之后有几个数字就表示有几行 data 表示 元数据 显然为1, 2, 3, 4, 5, 6 shape 表示 矩阵的形状 为 3 * 3 indices...而各个数据在哪一行就要通过indptr参数得到的 indptr 表示每行数据的个数:[0 2 3 6]表示从第0行开始数据的个数,0表示默认起始点,0之后有几个数字就表示有几行,第一个数字2表示第一行有...非0数据行是indices[indptr[i]:indptr[i+1]] 数据是data[indptr[i]:indptr[i+1]] # 在本例中,共有三列 # 第0列,有非0元素的数据行(0列索引下的行...第2行是6 coo_matrix 这个就更容易了,给我一分钟。...直接上例子如下:即n行,m列存了data[i],其余位置皆为0. >>> from scipy.sparse import coo_matrix >>> coo_matrix((3, 4), dtype
indices 存储每行中数据的列号,与属性 data 中的元素一一对应 indptr 存储每行数据元素的起始位置 如下图所示: 第 1 行:indptr 0-2 指 indices[0:2] 的值即...的值即 2,3 和 4,分别又指第 2,3 和 4 列,对应的数据 7,1 和 2 第 6 行:indptr 6-6 指 indices[6:6] 的值为空,无数据 第 7 行:indptr 6-7 指...,同样由三个一维数组 indptr, indices, data 组成, indices 存储每列中数据的行号,与属性 data 中的元素一一对应 indptr 存储每列数据元素的起始位置 如下图所示:...第 0 列:indptr 0-1 指 indices[0:1] 的值即 0,分别又指第 0 行,对应的数据 8 第 1 列:indptr 1-1 指 indices[1:1] 的值为空,无数据 第 2...] 的值即 4 和 6,分别又指第 4 和 6 行,对应的数据 1 和 9 第 4 列:indptr 6-7 指 indices[6:7] 的值即 4,分别又指第 4 行,对应的数据 2 规律:indptr
csr_matrix((M, N), [dtype]):会实例化一个 M 行 N 列元素类型为 dtype 的全 0 矩阵。dtype 是一个可选参数,默认值为双精度浮点数。...csr_matrix((data, (row_ind, col_ind)), [shape=(M, N)]):data 是非零元素值,row_ind 是非零元素行索引,col_ind 是非零元素的列索引...,shape 是矩阵的行列数(M 行 N 列),默认会通过非零元素行索引外加上非零元素列索引进行推断。...csr_matrix((data, indices, indptr), [shape=(M, N)]):第 i 行非零元素的列索引是 indices[indptr[i]:indptr[i+1]],对应的非零元素值存储在...data[indptr[i]:indptr[i+1]],shape 是矩阵的行列数(M 行 N 列),默认会通过 indices 和 indptr 进行推断。
推荐 | 微软SAR近邻协同过滤算法解析(一)前面这篇介绍了整个SAR算法,算法本身比较容易理解。本篇主要对一下里面有趣的小函数。...其第五种初始化方式这是直接体现csr_matrix的存储特征:csr_matrix((data, indices, indptr), [shape=(M, N)]),意思是,矩阵中第i行非零元素的列号为...indices[indptr[i]:indptr[i+1]],相应的值为data[indptr[i]:indptr[i+1]] >>> import numpy as np >>> from scipy.sparse...indptr csr_matrix各行的起始值,length(csr_object.indptr) == csr_object.shape[0] + 1 has_sorted_indices...举个简单的例子,三个用户在测试集中的商品个数分别是10,12,8,模型得到的top-10推荐列表中,分别有6个,5个,4个在测试集中,那么此时HR的值是 (6+5+4)/(10+12+8) = 0.5
一维数组indptr(行偏移量):包含了证书使得indptr[i]是data中元素的索引,它是行i中的第一个非零元素。...如果整个行i为零,则indptr[i]==indptr[i+1] 如初始矩阵有m行,则len(indptr)==m+1 一维数组Indices(列号:): 其使用如下方式包含列索引信息:indices[..., 2, 3, 4, 5, 6]) A=csr_matrix((data, indices, indptr), shape=(3, 3)).toarray() #生成CSR格式的矩阵 print(A) ...#运行结果: [[1 0 2] [0 0 3] [4 5 6]] 解析:第i行的列索引存储在indices[indptr[i]:indptr[i+1]]中,对应的值为data[indptr...链表稀疏格式在列表数据中以行方式存储非零元素, 列表data: data[k]是行k中的非零元素的列表。如果该行中的所有元素都为0,则它包含一个空列表。
结果2、The ENVI algorithm(算法的东西很多我也不是很懂,喜欢数学奈何大学四年浪费在生物医学上了,全给荒废了)ENVI采用条件变分自编码器来推断scRNA-seq数据中的空间背景,并通过将这两种模式映射到一个共同的嵌入来推算空间数据中缺失的基因...这种方法可以使用有限的空间分析数据来为单细胞图谱中的数百万个细胞赋予空间背景。COVET表示邻近细胞之间的基因covariation;因此,除了推断邻居的细胞类型外,还可以推断它们的基因表达。...= 0] ** (-alpha) mat = scipy.sparse.csr_matrix((D, (range(N), range(N))), shape=[N, N])...= 0] T = scipy.sparse.csr_matrix((D, (range(N), range(N))), shape=[N, N]).dot(kernel) # Eigen value...= data.shape[0] W = scipy.sparse.csr_matrix((np.exp(-dists), (x, y)), shape=[N, N]) # Diffusion
张量在坐标变换时也会按照某些规则作线性变换,是一种特殊的数据结构,在MindSpore网络运算中起着重要作用。...Tensor与NumPy互相转换 稀疏张量 稀疏张量是一种特殊类型的张量,其中大部分元素的值为零。在一些应用场景中,如推荐系统、分子动力学、图神经网络等,数据的特征往往是稀疏的。...CSRTensor CSR稀疏张量格式以values、indptr和indices存储非零元素的值和位置,具有高效的存储与计算优势。...其中,indptr表示每一行非零元素在values中的起始位置和终止位置,indices表示非零元素在列中的位置,values表示非零元素的值,shape表示稀疏张量的形状。...COOTensor COO(Coordinate Format)稀疏张量格式用于表示在给定索引上非零元素的集合,包括indices(非零元素下标)、values(非零元素的值)和shape(稀疏张量的形状
这就引出了一个简单的问题: 我们可以在常规的机器学习任务中只存储非零值来压缩矩阵的大小吗? 简单的答案是:是的,可以! 我们可以轻松地将高维稀疏矩阵转换为压缩稀疏行矩阵(简称 CSR 矩阵)。...= sparse.csr_matrix(m) 虽然我们的原始矩阵将数据存储在二维数组中,但转换后的 CSR 矩阵将它们存储在 3 个一维数组中。...值数组 Value array:顾名思义,它将所有非零元素存储在原始矩阵中。数组的长度等于原始矩阵中非零条目的数量。在这个示例中,有 7 个非零元素。因此值数组的长度为 7。...最后一个元素表示原始数组中非零元素的数量。长度为 m + 1;其中 m 定义为原始矩阵中的行数。...所以可以理解为将这些数据转换为稀疏矩阵是值得的,因为能够节省很多的存储。 那么如何判断数据的稀疏程度呢?使用NumPy可以计算稀疏度。
张量是一种特殊的数据结构,与数组和矩阵非常相似。张量(Tensor)是MindSpore网络运算中的基本数据结构。...:\n", output.shape) # [[0. 1...其中,非零元素的值存储在values中,非零元素的位置存储在indptr(行)和indices(列)中。...各参数含义如下: indptr: 一维整数张量, 表示稀疏数据每一行的非零元素在values中的起始位置和终止位置, 索引数据类型支持int16、int32、int64。...values: 一维张量,表示CSRTensor相对应的非零元素的值,与indices长度相等。
这就引出了一个简单的问题: 我们可以在常规的机器学习任务中只存储非零值来压缩矩阵的大小吗? 简单的答案是:是的,可以! 我们可以轻松地将高维稀疏矩阵转换为压缩稀疏行矩阵(简称 CSR 矩阵)。...= sparse.csr_matrix(m) 虽然我们的原始矩阵将数据存储在二维数组中,但转换后的 CSR 矩阵将它们存储在 3 个一维数组中。...值数组 Value array:顾名思义,它将所有非零元素存储在原始矩阵中。数组的长度等于原始矩阵中非零条目的数量。在这个示例中,有 7 个非零元素。因此值数组的长度为 7。...最后一个元素表示原始数组中非零元素的数量。长度为 m + 1;其中 m 定义为原始矩阵中的行数。...第四个值3:表示第4行起始,因为第3行没有非0值,所以非0值的总数还是3 第五个值4:没有第5行,所以可以认为这个值是整个矩阵中所有非0值的总数 绘制样本数据 同样我们也可以对稀疏的矩阵进行可视化 import
)) print('词汇表为:\n', count_vec.vocabulary_) 输出为: (0, 1) 1 # 这里=>0代表第一个文档,也就是我们语料中第一句话,1地表词汇的索引,在这里是壮观...scipy.sparse.csr.csr_matrix'> 词汇表为: {'北京': 0, '天安门': 2, '壮观': 1, '经常': 5, '广场': 3, '拍照': 4} tfidf 计算文档中每个词的...= count_data.toarray() print(count_array, count_array.shape, type(count_data)) print('词汇表为:\n', tfidf_vecc.vocabulary...toarray()这个方法,count_data 为什么可以通过这个方法可以转化成那个样子,后来查了一下资料: 下面是一个关于csr_matrix的实例: import numpy as np from...) # 非零个数 print(b.nnz) # 非零值 print(b.data) # 稀疏矩阵非0元素对应的列索引值所组成数组 print(b.indices) # 第一个元素0,之后每个元素表示稀疏矩阵中每行元素
由此可见,数据的稀疏性,是我们在实际应用场景中面临的一个非常常见的挑战与问题。 one-hot编码带来的另一个问题是特征空间变大。...在多项式模型中,特征xi与xj的组合用xixj表示。为了简单起见,我们讨论二阶多项式模型。具体的模型表达式如下: ? 上式中,n表示样本的特征数量,xi表示第i个特征。...使用的是scipy.sparse中的csr.csr_matrix,理解这个函数真的费了不少功夫呢,不过还是在下面博客(https://blog.csdn.net/u012871493/article/details...盗用博客中的一张图来帮助大家理解这个函数的输入: ?...估计值计算 得到我们的输入之后,我们使用tensorflow来设计我们的模型,其实很简单啦,我们模型的估计值由两部分构成,原始的可以理解为线性回归的部分,以及交叉特征的部分,交叉特征直接使用我们最后推导的形式即可
(row, col)), shape=(3, 8)) m2 # 输出 ' with 3 stored...elements in Compressed Sparse Row format> 这里创建了一个 的稀疏矩阵,然后用CSR方式压缩,从返回信息中可知,在m2这个压缩矩阵中,保存了 3 个元素,...与data中的值的数量一致。...可以通过csr_T的属性,分别得到行偏移量、列索引和值,请与前述分析对照,理解 CSR 的特点。..., 2, 1], dtype=int64) 其他压缩模式,读者可以结合 SciPy 中的类进行理解和使用。
或 jax.pmap() 中可能会表现出意外行为。...这时,您必须小心使用在其余计算中需要的余切值。...考虑这个函数,它从矩阵和向量输入计算更复杂的结果: >>> def f(M, v): ......], dtype=float32) 如果我们直接传递稀疏矩阵到这个函数,将会导致错误,因为 jnp 函数不识别稀疏输入。...indices**)** – 批量 COO 格式中的数据和索引。 shape (tuple[int, …**]) – 稀疏数组的形状。
引言 决策树是一种广泛应用于分类和回归任务的监督学习算法。它通过将数据集划分成不同的子集来做出决策,直观且易于理解。...信息增益的计算公式 信息增益(Information Gain)用于衡量选择某个特征进行数据划分时,数据集纯度的提升,其计算公式为: I 其中, 是特征, 是根据特征 的值 划分的数据子集。...决策树的构建 决策树的构建过程可以归纳为以下步骤: 选择最佳特征进行数据集划分:选择使得信息增益最大化或基尼指数最小化的特征。 根据特征值划分数据集:将数据集根据选定特征的不同取值划分为若干子集。...v: 子数据集 sub_data = 由 data 中特征 A 的值为 v 的实例构成 如果 sub_data 为空: 在 node 上创建叶节点...无需特征缩放:决策树对数据的缩放不敏感,不需要进行特征归一化或标准化。 处理缺失值:决策树能够处理数据集中的缺失值。 非线性关系:决策树能够捕捉数据中的非线性关系。
如果使用有限的列来可靠地描述某些事物,则通常为给定数据点分配的描述性值已被剪掉,以提供有意义的表示:一个人,一张图像,一个虹膜,房价,潜在的信用风险等。...那句话中有这个词吗?任何给定的句子中都有很多可能出现的单词,但实际上并不是很多。同样,可能有很多物品要出售,但是任何个人都不会购买很多物品。 这是稀疏矩阵在机器学习中起作用的一种方式。...那么关于列表,我们在其中一个列中跟踪row,col非零项目的存在以及在另一列中其对应值的情况呢?请记住,稀疏矩阵不必只包含零和一。只要大多数元素为零,无论非零元素中存在什么,矩阵都是稀疏的。...,特别是相同元素值的位置差异。...变为360m。
: SciPy 稀疏矩阵笔记 Sparse稀疏矩阵主要存储格式总结 Python数据分析----scipy稀疏矩阵 1.1 SciPy 几种稀疏矩阵类型 SciPy 中有 7 种存储稀疏矩阵的数据结构...由于在内存中存储顺序的差异,csc_matrix 矩阵更适合取列切片, 而 csr_matrix 矩阵更适合用来取行切片。...矩阵属性 from scipy.sparse import csr_matrix ### 共有属性 mat.shape # 矩阵形状 mat.dtype # 数据类型 mat.ndim # 矩阵维度...(i) # 返回矩阵行i的一个拷贝,作为一个(1 x n) 稀疏矩阵 (行向量) mat.nonzero() # 非0元索引 mat.diagonal() # 返回矩阵主对角元素 mat.max...(加toarray()和不加都是对的),内存不容易爆掉 #fea_datasets = csr_matrix((data, (row, col)), shape=(row_index, max_col+
领取专属 10元无门槛券
手把手带您无忧上云