修改csr_matrix的值
更新csr_matrix的值
- 便捷方式
- 我的实现...
便捷方式
原文链接
稀疏矩阵如下
import numpy as np
from scipy.sparse importx = csr_matrix(np.array([[1, 0, 2, 0, 3], [0, 4, 0, 5, 0]]))
当需要将对其元素小于3的元素修改为0时,很容易想到这种方式
x[x < 3] = 0
但是这种方式在大型稀疏矩阵的情况下会报以下的警告
/home/miniconda3/lib/python3.6/site-packages/scipy/sparse/compressed.py:282: SparseEfficiencyWarning: Comparing a sparse matrix with a scalar greater than zero using < is inefficient, try using >= instead.warn(bad_scalar_msg, SparseEfficiencyWarning)
因为大型稀疏矩阵的情况下,大多数元素都为0,在用<
号判断时,很多为0的元素也需要重新赋值,所以这种方式极其不好,可以看到warning中说到>=
的判断要更有效率。
那么,我们可以这样来选取,不是所有小于3的元素都置为0,而是在所有非0元素中将小于3的置为0
nonzero_mask = np.array(x[x.nonzero()] < 3)[0]
然后就可以获取相应的行列
rows = x.nonzero()[0][nonzero_mask]
cols = x.nonzero()[1][nonzero_mask]
x[rows, cols] = 0print(x.todense())
# 最后消除掉0
x.eliminate_zeros() # This happens inplace
[[0 0 0 0 3][0 4 0 5 0]]
我的实现…
在开发的过程中,经常涉及修改稀疏矩阵的值的操作,之前经常是直接通过csr_matrix
的属性遍历修改,需要自己遍历实现修改data里面的内容
import numpy as npfrom scipy.sparse import csr_matrixx = csr_matrix(np.array([[1, 0, 2, 0, 3], [0, 4, 0, 5, 0]]))print(x)print(x.toarray())row, col = x.shape# 当data[i][j] < 3时设置为0for i in range(row):for r in range(x.indptr[i], x.indptr[i+1]):if x.data[r] < 3:x.data[r] = 0print(x.toarray())
输出结果如下, 如果对csr_matrix中的indptr和data属性不清楚,可以参考稀疏矩阵的存储方式
1--- (0, 0) 1(0, 2) 2(0, 4) 3(1, 1) 4(1, 3) 5
2--- [[1 0 2 0 3][0 4 0 5 0]]
3--- [[0 0 0 0 3][0 4 0 5 0]]
修改csr_matrix的值相关推荐
- 转载非原创:修改BB 的内容,回车后修改CC 的值
原文 http://blog.csdn.net/iamah/article/details/8438981 修改BB 的内容,回车后修改CC 的值 步骤: 1. 注册类为对类CL_GUI_ALV_GR ...
- 修改数组的值和多维数组排序
foreach($ret as $key => $value) { //将数组元素中为空地补0,且添加sum元素的计算,注意修改数组的值,需要$key定位到是数组的哪一个地方需要修改,而不能简单 ...
- VUE项目中使用this.$forceUpdate();解决页面v-for中修改item属性值后页面v-if不改变的问题
VUE项目中使用this.$forceUpdate();解决页面v-for中修改item属性值后页面v-if不改变的问题 参考文章: (1)VUE项目中使用this.$forceUpdate();解决 ...
- 学习旧岛小程序 (5) observer 函数中修改属性的值
不要在一个属性的 observer 函数中修改属性的值 不然会造成内存泄露 错误代码: properties: {/* 期刊号 */index: {type: String,observer: fu ...
- 为什么不使用volatile,其它线程也能得到当前线程修改后的值,不使用volatile也不存在可见性问题?原来解决可见性问题不一定需要volatile,println也可以
1. 为什么不使用volatile,其它线程也能得到变量修改后的值 实验代码分析: ①初始变量a=true,b=false: ②一个线程判断a或者b是否被改为相应逻辑,如果是,那么输出信息. ③修改a ...
- C# 【无法修改XX返回值,因为它不是变量】
C# [无法修改XX返回值,因为它不是变量] using UnityEngine; using System.Collections; using System.Xml.Linq; using Uni ...
- SqlServer 增加字段,修改字段名,删除字段,修改字段默认值
SqlServer 增加字段,修改字段名,删除字段,修改字段默认值 1:增加字段 语法:alter table 表名 add 新增字段名 字段类型 默认值- 2:修改字段名 语法:exec sp_re ...
- java反射设置属性值_Java反射如何有效的修改final属性值详解
前言 以前写过一篇 Java 反射修改 final 属性值,本文将在这里重新温习一下Java反射如何有效的修改final属性值,下面话不多说了,来一起看看详细的介绍: 假设有个类 class Pers ...
- 全局变量-函数内部不允许修改局部变量的值
# 全局变量 num = 10def demo1():# 希望修改全局变量的值# 在 python 中,是不允许直接修改全局变量的值# 如果使用赋值语句,会在函数内部,定义一个局部变量num = 99 ...
最新文章
- python csv文件读取行列_使用Numpy读取CSV文件,并进行行列删除的操作方法
- 网易宣布:招30人![免费加入]网易java人才培养计划!
- 五大软件设计原则学习笔记2——开放封闭原则
- redhat7.2 修改centos yum源
- python获取月份字符串_python - python从字符串获取日期 - 堆栈内存溢出
- AJAX和select,绑定值,动态加载select的Item值,设置所选的值 (全都是客户端控件)...
- MATLAB设置使用语言为中文
- Arcgis地籍图河流注记字体批量修改
- Linux命令之md5sum的作用以及使用方法(md5是什么?)
- Shell脚本三种循环
- Centos6.5 LAMP环境源码包安装与配置,附安装包百度网盘地址
- Java的各个应用平台
- JD token解密之旅
- Unity 3d 最新下载与安装
- JAVA黑马程序员day7(面向对象)
- css之-各种基本图形画法总结(css3.0)
- 控制系统的观测器基础知识
- 拨打电话通过蓝牙接通
- python练习题 11-20
- 安卓手机超强的悬浮窗工具
热门文章
- YOLOv5实战中国交通标志识别(TT100K数据集)
- 【408】计算机统考科目知识整理
- eclipse各版本说明与区别
- 论劳动者的休息权及其法律保障
- 后端质料springboot
- java 登录牵手_智慧职教2020Java程序基础章节答案
- 十大WEB安全问题(OWASP Top Ten Project-2017)
- ryu-manager报错SyntaxError: invalid syntax
- caffe代码阅读8: Data_layers的实现细节(各个数据读取层的实现细节) 2016.3.25-28
- 转:绝对论坛元老,05年注册。告诉你一个真实的魅族