import numpy as np
from scipy import sparse

(1)COO( Coordinate)

最直观的就是COO格式。它用了1维的数组来表示2维的矩阵,每个数组的长度与稀疏矩阵A的非零数字个数一样,它们的组合(i,j)组成了非零数字在稀疏矩阵中的坐标。

  • row,col数组,组合起来指明非零数字在稀疏矩阵中的坐标/定位。
  • data数组,指定了非零数字是哪些
s=np.array([[4,0,3],
[0,32,0]]);s
array([[ 4,  0,  3],
[ 0, 32, 0]])

为表示 s,我们这样做:

data=np.array([4,3,32])
row=np.array([0,0,1])
col=np.array([0,2,1])
s_coo=scipy.sparse.coo_matrix((data,(row,col)))

.toarray()方法返回一个numpy数组来表示稀疏矩阵,我们用这个方法来检查下s_coo是否创建对了:

s_coo.toarray()
array([[ 4,  0,  3],
[ 0, 32, 0]])

同样我们可以用.A属性,但实际是调用了一个方法。但推荐用toarray()

(2)CSR 格式(Compressed Sparse Row)

COO格式虽然直观,但是不够精简,毕竟对于同一行/同一列的非零数字,我们重复的多用了row/column。因此,我们可以“压缩”行数,即只要表示出列数是从哪行到哪行就可以定位出非零数字的位置,而不用重复的写出来每一个非零数字的行数。这就是CSR的意思。

首先看一个COO的例子:

row=[0,1,1,1,1,2,3,4,4]
col=[2,0,1,3,4,1,0,3,4]
data=np.array([6,1,2,4,5,1,9,6,7])
ss=sparse.coo_matrix((data,(row,col)))
ss.toarray()
array([[0, 0, 6, 0, 0],
[1, 2, 0, 4, 5],
[0, 1, 0, 0, 0],
[9, 0, 0, 0, 0],
[0, 0, 0, 6, 7]])

现在用CRS格式,row换成indptr,indptr=[0,1,5,6,7,9],即表示col[0,1)在第一行,即6在第一行第2列;col[1,5)在第二行,即1,2,4,5在第二行的第0,1,3,4列,等等

indptr=[0,1,5,6,7,9]
csr=sparse.csr_matrix((data,col,indptr))
csr.toarray()
array([[0, 0, 6, 0, 0],
[1, 2, 0, 4, 5],
[0, 1, 0, 0, 0],
[9, 0, 0, 0, 0],
[0, 0, 0, 6, 7]])

(3)CSC(Compressed Sparse Column)

与CSR类似,但压缩的是列,data中的数字按列排列,不再赘述。

Scipy中的稀疏矩阵的编码方式的更多相关文章

  1. eclipse中设置项目的编码方式

    1.windows->Preferences...打开"首选项"对话框,左侧导航树,导航到general->Workspace,右侧Text file encoding ...

  2. Redis中存入存储的编码方式不一致解决问题

    在利用redis缓存的时候,存入的数据与取出的数据编码方式不一致解决办法. from redis import StrictRedis #ecoding = 'utf-8',默认解码方式为bytes, ...

  3. 修改MySQL数据库中表和表中字段的编码方式的方法

    今天向MySQL数据库中的一张表添加含有中文的数据,可是老是出异常,检查程序并没有发现错误,无奈呀,后来重新检查这张表发现表的编码方式为latin1并且原想可以插入中文的字段的编码方式也是latin1 ...

  4. Python中的幽灵—编码方式

    首先要搞懂本地操作系统编码与系统编码的区别: 本地操作系统编码方式与操作系统有关,Linux默认编码方式为utf-8,Windows默认编码方式为gbk: 系统编码方式与编译器or解释器有关,Pyth ...

  5. 刨根究底字符编码之十一——UTF-8编码方式与字节序标记

    UTF-8编码方式与字节序标记 一.UTF-8编码方式 1. 接下来将分别介绍Unicode字符集的三种编码方式:UTF-8.UTF-16.UTF-32.这里先介绍应用最为广泛的UTF-8. 为满足基 ...

  6. vim 编码方式的设置

    和所有的流行文本编辑器一样,Vim 可以很好的编辑各种字符编码的文件,这当然包括UCS-2.UTF-8 等流行的 Unicode 编码方式.然而不幸的是,和很多来自 Linux 世界的软件一样,这需要 ...

  7. iOS 中使用Base64编码方式编码图片数据

    最近一个项目要求对图片数据简单加密下,就是那种不能直接看到图片内容就行.于是我使用了base64编码对图片数据进行编码,把图片2进制数据变成了base64的字符串,再把这个字符串保存到server的数 ...

  8. JS 和 Java 中URL特殊字符编码方式

    前几天遇到url特殊字符编码的问题,在这里整理一下: JavaScript 1.  编码 escape(String) 其中某些字符被替换成了十六进制的转义序列. 解码 unescape(String ...

  9. java中的字符编码方式

    1. 问题由来 面试的时候被问到了各种编码方式的区别,结果一脸懵逼,这个地方集中学习一下. 2. 几种字符编码的方式 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符 ...

  10. JAVA中默认的编码方式

    转:http://blog.csdn.net/scyatcs/article/details/31356823 编码问题存在两个方面:JVM之内和JVM之外.1.Java文件编译后形成class这里J ...

随机推荐

  1. RVV1.0指令中关于_m系列函数的使用方法,即掩码mask的转换使用

    在RVV1.0指令函数的使用中,遇到了mask加载不匹配问题 uint8_t mask_data[] = {15, 0, 0, 0, 0, 0, 0, 0}; vbool8_t mask = vlm_ ...

  2. 自己修改的一款Typora学术主题Academic-zh-vq

    这款typora主题是在Academic-Zh主题的基础上修改而来的. 主题衍生路径: 官方Academic主题-->zh-academic主题-->Academic-Zh主题--> ...

  3. python 二级 组合数据类型

    1.集合特点 set 使用{}表示 无序 内容不重复 2.集合的操作:&.!.-.^ 序列特点 有序 4.序列常用的函数 5.列表函数 6.列表方法 s=[1,2,3] a=[5,6] 增加: ...

  4. Linux下yum安装mysql 遇到的问题Can't open and lock privilege tables: Table 'mysql.user' doesn't exist 错误

    今天在linux下安装mysql时 执行service mysqld start时, mysql总是启动失败 后来查看mysql日志:/var/log/mysqld.log,发现有个Can't ope ...

  5. `go install`指令行为分析

    分析go install [build flags] [packages]指令做了什么,如何实现安装GO软件,我们如何编写一个软件使得可以使用该指令安装自己编写的程序. 参考go官方文档 安装位置 $ ...

  6. 一步一步教你部署ktransformers,大内存单显卡用上Deepseek-R1

    环境准备 硬件环境 CPU:intel四代至强及以上,AMD参考同时期产品 内存:800GB以上,内存性能越强越好,建议DDR5起步 显卡:Nvidia显卡,单卡显存至少24GB(用T4-16GB显卡 ...

  7. LaTeX配置说明

    LaTex_intro 1.VSCode 安装 微软编辑器:VSCode 配置 安装 LaTeX Workshop 插件 settings.json 路径为:C:\Users\Administrato ...

  8. .NET周刊【3月第3期 2025-03-16】

    国内文章 在 VisualStudio 一键 F5 启动调试 Roslyn 分析器项目 https://www.cnblogs.com/lindexi/p/18730521 本文将告诉大家如何在 Vi ...

  9. Lua 的os.date()

    Lua os.date() os.date## 原型:os.date ([format [, time]]) 解释:返回一个按format格式化日期.时间的字串或表. usage## 参数格式: 由原 ...

  10. ESP-IDF教程2 GPIO - 输入、输出和中断

    1.前提 1.1.基础知识 1.1.1.GPIO 分类 ESP32 系列芯片按照 GPIO 特殊的使用限制分类,可以将其分为如下几类: GPIO PIN GPI PIN Strapping PIN S ...