Python学习-Scipy库稀疏矩阵的建立

稀疏矩阵指在矩阵中值为0的元素的数量远远多于非0值的矩阵
(非0元素总数/所有元素总数<=0.05)
稀疏矩阵的实现对象:
csc_matrix(): 压缩面向列的稀疏矩阵
csr_matrix(): 压缩面向行的稀疏矩阵
bsr_matrix(): 基于块的行稀疏矩阵
lil_matrix(): 基于行的链表格稀疏矩阵
dok_matrix(): 基于字典键的稀疏矩阵
coo_matrix(): 基于坐标格式的稀疏矩阵(即IJV, 三维格式)
dia_matrix(): 基于对角线存储的稀疏矩阵

目录

1、创建面向列的稀疏矩阵sparse.csc_matrix()

2、创建基于坐标格式的稀疏矩阵sparse.coo_matrix()

导入库

import scipy.sparse as spr
import numpy as np

1、创建面向列的稀疏矩阵sparse.csc_matrix(arg1, shape=None, dtype=None, copy=False)

参数介绍:
shape: 矩形的形状
dtype: 矩形值的类型
copy: 指定建立的稀疏矩阵是否为复制模式

1)arg1为一个二维数组,密集矩阵
D1 = np.arange(9).reshape(3, 3)
c1 = spr.csc_matrix(arg1=D1)
print(c1)
输出
  (1, 0) 3(2, 0) 6(0, 1) 1(1, 1) 4(2, 1) 7(0, 2) 2(1, 2) 5(2, 2) 8
2)arg1为一个未压缩的稀疏矩阵
D2 = np.array([[0, 0, 0], [0, 0, 0], [0, 0, 1]])
c2 = spr.csc_matrix(arg1=D2)
print(c2)
输出
  (2, 2) 1
3)arg1为(M, N),确定一个M行N列的空稀疏矩阵
c3 = spr.csc_matrix(arg1=(5, 6))
print(c3)
print(c3.todense())  # 输出原矩阵
输出

[[0. 0. 0. 0. 0. 0.][0. 0. 0. 0. 0. 0.][0. 0. 0. 0. 0. 0.][0. 0. 0. 0. 0. 0.][0. 0. 0. 0. 0. 0.]]
4)arg1=((data, (row_ind, col_ind)), [shape=(M, N)])

参数说明:
data:矩阵中非0值
row_ind和col_ind:data对应的行列坐标
shape:矩阵形状大小

row = np.array([1, 3, 4])
col = np.array([2, 5, 6])
data = np.array([3, 4, 5])
c4 = spr.csc_matrix((data, (row, col)), shape=(7, 7))
print(c4.todense())
输出
[[0 0 0 0 0 0 0][0 0 3 0 0 0 0][0 0 0 0 0 0 0][0 0 0 0 0 4 0][0 0 0 0 0 0 5][0 0 0 0 0 0 0][0 0 0 0 0 0 0]]
5) arg1=((data,indices,indptr), shape=(M, N))

参数说明:
data:矩阵中非0值
indices:data对应的行索引
indptr:为data、indices值范围提供下标,第i列对应的行坐标范围为indices[indptr[i]:indptr[i+1]],第i列的非0值范围是data[indptr[i]:indptr[i+1]], 长度为N+1

data = np.array([1, 10, 20, 5, 50, 60])
indices = np.array([0, 2, 2, 0, 1, 2])
indptr = np.array([0, 2, 3, 6])
c5 = spr.csc_matrix((data, indices, indptr), shape=(3, 3))

原理介绍:
当列坐标i=0时,
indptr[0]=0, indptr[1]=2;
indices[0:2]=[0,2];行坐标值
data[0:2]=[1,10];矩阵对应元素
即: matrix[0][0]=1, matrix[2][0]=10
当列坐标i=1时,
indptr[1]=2, indptr[2]=3;
indices[2:3]=[2];行坐标值
data[2:3]=[20];矩阵对应元素
即:matrix[2][1]=20
当列坐标i=2时,
indptr[2]=3, indptr[3]=6;
indices[3:6]=[0,1,2];行坐标值
data[3:6]=[5,50,60];矩阵对应元素
即: matrix[0][2]=5, matrix[1][2]=50, matrix[2][2]=60

print(c5.todense())
输出
[[ 1  0  5][ 0  0 50][10 20 60]]

2、创建基于坐标格式的稀疏矩阵sparse.coo_matrix()

参数说明:
shape: 矩形的形状
dtype: 矩形值的类型
copy: 指定建立的稀疏矩阵是否为复制模式

1)arg1为一个二维数组,密集矩阵
D1 = np.arange(9).reshape(3, 3)
c1 = spr.coo_matrix(arg1=D1)
print(c1)
print(c1.todense())
输出
  (0, 1) 1(0, 2) 2(1, 0) 3(1, 1) 4(1, 2) 5(2, 0) 6(2, 1) 7(2, 2) 8[[0 1 2][3 4 5][6 7 8]]
2)arg1为一个未压缩的稀疏矩阵
D2 = np.array([[0, 0, 0], [0, 0, 0], [0, 0, 1]])
c2 = spr.coo_matrix(arg1=D2)
print(c2)
print(c2.todense())
输出
  (2, 2) 1
[[0 0 0][0 0 0][0 0 1]]
3)arg1为(M, N),确定一个M行N列的空稀疏矩阵
c3 = spr.coo_matrix(arg1=(5, 6))
print(c3)
print(c3.todense())  # 输出原矩阵
输出

[[0. 0. 0. 0. 0. 0.][0. 0. 0. 0. 0. 0.][0. 0. 0. 0. 0. 0.][0. 0. 0. 0. 0. 0.][0. 0. 0. 0. 0. 0.]]
4)arg1=((data, (row_ind, col_ind)), [shape=(M, N)])

参数说明:
data:矩阵中非0值
row_ind和col_ind:data对应的行列坐标
shape:矩阵形状大小

row = np.array([1, 3, 4])
col = np.array([2, 5, 6])
data = np.array([3, 4, 5])
c4 = spr.coo_matrix((data, (row, col)), shape=(7, 7))
print(c4)
print(c4.todense())
输出
  (1, 2) 3(3, 5) 4(4, 6) 5
[[0 0 0 0 0 0 0][0 0 3 0 0 0 0][0 0 0 0 0 0 0][0 0 0 0 0 4 0][0 0 0 0 0 0 5][0 0 0 0 0 0 0][0 0 0 0 0 0 0]]

Python学习-Scipy库稀疏矩阵的建立(面向列的稀疏矩阵、基于坐标格式的稀疏矩阵)相关推荐

  1. Python学习-Scipy库信号处理signal(过滤、快速傅里叶变换、信号窗函数、卷积)

    Python学习-Scipy库信号处理signal 目录 1.过滤:以某种方式修改输入信号 2.快速傅里叶变换 3.信号窗函数 4.卷积 导入库 import matplotlib.pyplot as ...

  2. Python学习-Matplotlib库绘制简单点阵图、线型图操作

    Python学习-Matplotlib库绘制简单散点图图和线型图.标签设置以及刻度线设置操作 目录 1.Matplotlib绘图细节的简单理解 2.绘制点图.线型图 3.给图表设置复杂标注 4.移动刻 ...

  3. python导入scipy库、sympy库遇到的问题及解决方式

    首先从cmd中导入scipy库,输入代码: pip install scipy 注意: pip版本最好也要更新到最新版,否则容易发生版本冲突的问题. 但是出现异常:read time out 这时想到 ...

  4. 转载 Python 学习-Matplotlib库

    Python学习-Matplotib 载出处:https://blog.csdn.net/weixin_60535956/article/details/128311973 目录 Matplotlib ...

  5. Python学习 matplotlib库 霍兰德人格分析雷达图

    [Python学习] matplotlib库 绘制霍兰德人格分析雷达图 学习一些Python知识.用matplotlib库进行雷达图的绘制. 实现效果图片: 代码参考:<Python语言程序设计 ...

  6. Python中scipy库对mat文件进行读写操作

    mat文件是以字典的格式进行存储的,有时候Python中需要对字典进行读写,使用Python处理matlab的mat文件时,可以使用scipy库中的函数进行操作. 导入scipy库 对mat文件的读写 ...

  7. Python 学习之中的一个:在Mac OS X下基于Sublime Text搭建开发平台包括numpy,scipy

    1 前言 Python有许多IDE能够用,官方自己也带了一个,Eclipse也能够. 但我在使用各种IDE之后,发现用Sublime Text是最好用的一个.因此.我都是用Sublime Text来编 ...

  8. 21天Python学习——lxml库与Xpath提取网页数据

    ​ ​ 活动地址:CSDN21天学习挑战赛 一.爬虫提取网页数据的流程图 图源:100天精通Python(爬虫篇)--第45天:lxml库与Xpath提取网页数据_无 羡ღ的博客-CSDN博客_pyt ...

  9. Python中scipy库中csr_matrix()函数和csc_matrix()函数的解释

    在使用Python进行科学计算时经常需要用到稀疏矩阵的构造,而python的科学计算包scipy.sparse是很好的一个解决稀疏矩阵构造/计算的包. 构造稀疏矩阵常用的两个函数为:csr_matri ...

最新文章

  1. ***杂记-2013-07-12
  2. CString与LPCWSTR的转化
  3. 设置网页背景图片不显示
  4. Element.shadowRoot
  5. 岛国小姐姐来例假时,男朋友背着她偷偷查手机......
  6. Android学习拾遗
  7. python助教评分问题_【1414软工助教】单元测试 得分榜
  8. 开源信息系统开发平台之OpenExpressApp框架 1.1 春节飞虎版发布
  9. 查看网络情况netstat指令与动态监控top指令
  10. LintCode 寻找旋转排序数组中的最小值 II
  11. 测试与开发的冲突举例
  12. 全自动驾驶论文_自动驾驶汽车:我们距离全自动驾驶有多近?
  13. 第一个android应用程序,深入学习Android 第一个应用程序
  14. 厉害了!图解 23 种设计模式,终于有人讲清楚了!面试揭秘
  15. sftp 中文乱码 连接后_LINUX SFTP 中文 乱码
  16. 计算机控制系统开环控制有什么特点,自动控制系统基本控制方式?各有什么特点?...
  17. 荣耀畅玩8C生猛来袭夺C位,红米Note5看了只能默默躲角落
  18. css如何选择相同class下的第一个class元素和最后一个元素?
  19. Web端实现邮件发送
  20. python functools.reduce使用_Python的functools.reduce用法

热门文章

  1. CA—Certificate Authority证书授权中心
  2. 来自 Google 的高可用架构理念与实践
  3. 每天一个Linux命令-使用du查看文件大小
  4. 适用的验厂考勤工资AB账系统软件这样选择
  5. 语言学习游戏的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  6. 软考新思维--2017年上半年信息系统项目管理师上午试题分析与答案(试题46-50题)
  7. golang panic recover return defer的逻辑顺序问题
  8. pandas基础操作大全之数据合并
  9. java unicode 藏文_UNICODE 区域对照表
  10. 解决办法之Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC