coo-matrix和csr-matrix的含义和存储方式

本文介绍了scipy库中处理稀疏矩阵的coo-matrix和csr-matrix。两者在打印结果上相同,但存储方式不同。coo-matrix使用行索引、列索引和值三个数组存储非零元素,而csr-matrix使用indices、indptr和data数组,其中indptr作为指针指示每行非零元素的开始和结束位置。

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

最近看论文的时候,会用到scipy库。其中包含了一些稀疏矩阵处理的方法,看到网上的文章写的有点乱,因此想要记录下。
首先放下官方文档:scipy.sparse.coo-matrix, scipy.sparse.csr_matrix

1.coo-matrix 和 csr-matrix相同点

csr-matrix 和 coo-matrix 为scipy 中用于处理稀疏矩阵的两种数据结构,他们print出来的结果相同,都以"(row, col) value"的格式出现。

原矩阵:
[[0, 0, 1],
[2, 0, 3],
[4, 5, 6]]

打印coo-matrix

import numpy as np
from scipy.sparse import coo_matrix,csr_matrix
# Create a 2D numpy array
arr = np.array([
### COO Matrix 的基本概念 COO (Coordinate Format) 是一种用于表示稀疏矩阵的数据结构,在 `scipy` 中由 `coo_matrix` 函数实现。这种格式非常适合构建稀疏矩阵,因为它只需要存储非零元素的位置及其对应的值[^1]。 ### 创建 COO 矩阵 创建一个 COO 矩阵可以通过指定非零元素的行列索引以及相应的数值来完成: ```python from scipy.sparse import coo_matrix import numpy as np row = np.array([0, 3, 1, 0]) col = np.array([0, 3, 1, 2]) data = np.array([4, 5, 7, 9]) matrix_coo = coo_matrix((data, (row, col)), shape=(4, 4)) print(matrix_coo.toarray()) ``` 上述代码片段展示了如何利用给定的行、列坐标数据值初始化一个形状为 `(4, 4)` 的 COO 稀疏矩阵,并将其转换成密集数组形式以便查看具体内容[^4]。 ### 常见的操作与属性 #### 转换其他格式 可以轻松地将 COO 矩阵转换为 CSR 或 CSC 格式的矩阵,这对于后续更高效的计算非常有用: ```python csr_format = matrix_coo.tocsr() csc_format = matrix_coo.tocsc() print("CSR format:\n", csr_format.toarray(), "\nCSC format:\n", csc_format.toarray()) ``` #### 获取维度信息 获取矩阵大小的信息同样简单明了: ```python shape_info = matrix_coo.shape nnz_elements = matrix_coo.nnz # 非零元素数量 print(f"Matrix dimensions are {shape_info} with nnz={nnz_elements}") ``` #### 执行算术运算 支持与其他相同尺寸的 COO 矩阵之间进行加法减法等基础运算;也可以乘以标量或向量来进行缩放平移变换: ```python scalar_multiply = matrix_coo * 2 vector_addition = matrix_coo + coo_matrix(([1]*len(data), (row, col)), shape=matrix_coo.shape) print(scalar_multiply.toarray()) print(vector_addition.toarray()) ``` 这些操作均保持了原始稀疏性的特点,从而节省内存空间的同时提高了处理效率[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值