scipy压缩稀疏列数组csc_array

文章详细介绍了压缩稀疏列数组(csc)的概念,它是如何存储和表示稀疏矩阵的,包括data、indices和indptr三个关键编码数据的作用。文中还通过实例解释了这些数据之间的关系,并列举了csc_array的不同初始化方案。此外,文章提到了csc_array中的一些内置方法,用于高效处理稀疏矩阵计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本原理

csc,即Compressed Sparse Column,是压缩稀疏列数组,就是将稀疏矩阵按列分割,并对这些列进行存储。

在稀疏矩阵中,有三个关键的编码数据,分别是data, indicesindptr。其中data为数据,indices为序号索引,二者是一一对应的。而intptr则对数据进行分割,表明其属于哪一列。

个中关系,举个例子就能明白

from scipy.sparse import csc_array
import numpy as np

indptr = [0, 2, 3, 6]
indices = [0, 2, 2, 0, 1, 2]
data = [1,2,3,4,5,6]
csc = csc_array((data, indices, indptr))

print(csc.toarray())
'''
[[1 0 4]
 [0 0 5]
 [2 3 6]]
'''

先看indptr,里面共有4个值,这4个值组成了3个区间[0,2), [2,3), [3,6),说明接下来要生成的矩阵共有3列。

然后在看三个区间对应的indicesdata,以第0个区间[0,2)为例,对应的indices0,2,对应的data1,2,说明第0列的第0号是1、第2号是2,所以看上面的矩阵,第一列为 ( 1 , 0 , 2 ) T (1,0,2)^T (1,0,2)T;第1个区间为[2,3),对应的indices, data分别为23,说明第1列的第2个元素是3

初始化方案

csc_array支持下面5种初始化方案,其中最后一种就是上面讲解的生成逻辑。后两种方法有参数shape,可以指定稀疏矩阵的维度,如果不指定,则生成满足要求的最小维度的稀疏矩阵。

  • csc_array(D) D是一个稀疏数组或 2 × D 2\times D 2×D数组
  • csc_array(S) S是另一种稀疏数组
  • csc_array((M, N),dtype='d') 创建一个shape为 ( M , N ) (M, N) (M,N)的空数组,dtype为数据类型
  • csc_array((data, ij)) ij是坐标数组,可分解为i,j=ijdata是数据数组,设新矩阵为a,则a[i[k], j[k]] = data[k]
  • csc_array((data, indices, indptr))

内置方法

稀疏数组在计算上并不便捷,所以bsr_array中内置了下列函数,可以高效地完成计算。此外,scipy.sparse.linalg提供了更多的适用于稀疏矩阵的函数。

函数expm1, log1p, sqrt, pow, sign
三角函数sin, tan, arcsin, arctan, deg2rad, rad2deg
双曲函数sinh, tanh, arcsinh, arctanh
索引getcol, getrow, nonzero, argmax, argmin, max, min
舍入ceil, floor, trunc
变换conj, conjugate, getH
统计count_nonzero, getnnz, mean, sum
矩阵diagonal, trace
获取属性get_shape, getformat
计算比较multiply, dot, maximum, minimum
转换asformat, asfptype, astype, toarray, todense
转换tobsr, tocoo, tocsc, tocsr, todia, todok, tolil
更改维度set_shape, reshape, resize, transpose
排序sort_indices, sorted_indices
移除元素eliminate_zeros, prune, sum_duplicates
其他copy, check_format, getmaxprint, rint, setdiag
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微小冷

请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值