coo_matrix

转载自:博客

coo_matrix:构造矩阵,指定位置填数据

这个就更容易了。直接上例子如下:即n行,m列存了data[i],其余位置皆为0.

>>> from scipy.sparse import coo_matrix
>>> coo_matrix((3, 4), dtype=np.int8).toarray()
array([[0, 0, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 0]], dtype=int8)
>>>
>>> row  = np.array([0, 3, 1, 0])
>>> col  = np.array([0, 3, 1, 2])
>>> data = np.array([4, 5, 7, 9])
>>> coo_matrix((data, (row, col)), shape=(4, 4)).toarray()
array([[4, 0, 9, 0],
       [0, 7, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 5]])

### COO Format 稀疏矩阵简介 `coo_matrix` 是 SciPy 中一种用于表示稀疏矩阵的数据结构,属于 Coordinate (COO) 格式。这种格式通过分别存储非零元素的值以及它们对应的行索引和列索引来实现高效的内存利用[^1]。 #### `coo_matrix` 的基本属性 - **数据存储方式**: 非零元素被分为三个数组来存储:`data`, `row`, 和 `col`。 - `data`: 存储所有的非零元素值。 - `row`: 对应于 `data` 数组中每个非零元素所在的行号。 - `col`: 对应于 `data` 数组中每个非零元素所在的列号。 - **适用场景**: 当需要频繁构建或修改稀疏矩阵时,`coo_matrix` 提供了一个简单直观的方式[^4]。 --- ### Python 示例代码 以下是创建和操作 `coo_matrix` 的具体示例: ```python from scipy.sparse import coo_matrix import numpy as np # 定义非零元素的位置和值 data = np.array([3, 5, 7]) # 非零元素的值 rows = np.array([0, 2, 1]) # 行索引 cols = np.array([1, 0, 2]) # 列索引 # 构造一个形状为 (3, 3) 的 COO 格式的稀疏矩阵 sparse_matrix = coo_matrix((data, (rows, cols)), shape=(3, 3)) print("稀疏矩阵:") print(sparse_matrix) # 转换为密集矩阵查看效果 dense_matrix = sparse_matrix.toarray() print("\n转换后的密集矩阵:") print(dense_matrix) ``` 上述代码展示了如何使用 `coo_matrix` 来定义一个简单的稀疏矩阵,并将其转化为稠密矩阵以便观察其内容。 --- ### 将 COO 格式保存为 Mtx 文件 如果希望将 `coo_matrix` 保存到外部文件中,可以采用 `.mtx` 格式。这是一种标准的文本文件格式,专门设计用来存储稀疏矩阵的信息[^3]。 下面是具体的保存过程: ```python from scipy import sparse import scipy.io as sio # 创建随机稀疏矩阵 matrix = sparse.random(10, 10, density=0.2, format='coo') # 保存为 .mtx 文件 sio.mmwrite('sparse_matrix.mtx', matrix) print("稀疏矩阵已成功保存至 'sparse_matrix.mtx'") ``` 此部分演示了如何借助 `scipy.io.mmwrite()` 方法导出 `coo_matrix` 数据。 --- ### 注意事项 尽管 `coo_matrix` 在构建阶段非常方便,但它并不支持就地修改(即无法直接更改其中的元素)。因此,在完成初始构造之后,通常会将其转换成其他更适合计算的形式,比如 CSR 或 CSC 格式。 例如: ```python csr_matrix = sparse_matrix.tocsr() # 转换为 CSR 格式 csc_matrix = sparse_matrix.tocsc() # 转换为 CSC 格式 ``` 这些格式允许更高效的算术运算和切片访问。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值