numpyNaN

numpyNaN

nan(NAN,Nan):not a number表示不是一个数字

什么时候numpy中会出现nan:

  1. 当我们读取本地的文件为float的时候,如果有缺失,就会出现nan
  2. 当做了一个不合适的计算的时候(比如无穷大(inf)减去无穷大)

inf(-inf,inf):infinity,inf表示正无穷,-inf表示负无穷

什么时候回出现inf包括(-inf,+inf)

  1. 比如一个数字除以0,(python中直接会报错,numpy中是一个inf或者-inf
import numpy as npa = np.inf
print(type(a))b = np.nan
print(type(b))
<class 'float'>
<class 'float'>
# 两个nan是不相等的
print("nan==nan:", np.nan==np.nan)
print("nan!=nan:", np.nan!=np.nan)print("*"*50)t = np.arange(24).reshape(4, 6)
t[:,0] = 0
print(t)# 统计t中非0的元素个数
print(np.count_nonzero(t))print("*"*50)
# 设置nan之前要确保数组是float格式
t = t.astype("float")
t[2, 3] = np.nan
print(t)# 统计数组中nan的数量
t1 = (t!=t)
print(t1)
print(np.count_nonzero(t1))# 求nan数量也可以直接写成
print(np.count_nonzero(t!=t))
nan==nan: False
nan!=nan: True
**************************************************
[[ 0  1  2  3  4  5][ 0  7  8  9 10 11][ 0 13 14 15 16 17][ 0 19 20 21 22 23]]
20
**************************************************
[[ 0.  1.  2.  3.  4.  5.][ 0.  7.  8.  9. 10. 11.][ 0. 13. 14. nan 16. 17.][ 0. 19. 20. 21. 22. 23.]]
[[False False False False False False][False False False False False False][False False False  True False False][False False False False False False]]
1
1
# 判断一个值是否是nan
print(np.isnan(t))# 那么当然也可以通过这种方式来求nan的数量
np.count_nonzero(np.isnan(t))
[[False False False False False False][False False False False False False][False False False  True False False][False False False False False False]]1
t2 = np.arange(12).reshape((3, 4))
print(t2)
# 求和
print(np.sum(t2))# 求某一个维度的和
# 求每一行的和
print(np.sum(t2, axis=0))
# 求每一列的和
print(np.sum(t2, axis=1))print("*"*50)
print(t)
# nan和任何值计算都是nan
print(np.sum(t))
print(np.sum(t, axis=0))
[[ 0  1  2  3][ 4  5  6  7][ 8  9 10 11]]
66
[12 15 18 21]
[ 6 22 38]
**************************************************
[[ 0.  1.  2.  3.  4.  5.][ 0.  7.  8.  9. 10. 11.][ 0. 13. 14. nan 16. 17.][ 0. 19. 20. 21. 22. 23.]]
nan
[ 0. 40. 44. nan 52. 56.]

假如在数据中遇到了nan该如何处理呢?

在一组数据中单纯的把nan替换为0并不合适。全部替换为0后,替换之前的平均值如果大于0,替换之后的均值肯定会变小,所以更一般的方式是把缺失的数值替换为均值(中值)或者是直接删除有缺失值的一行。

# 统计函数
t = np.arange(1, 25).reshape(4, 6)
print(t)# 求总和
print("sum:")
print(t.sum())# 求某一维度的总和
print(t.sum(axis=0))# 求均值, 受离群点的影响较大
print("mean:")
print(t.mean())
print(t.mean(axis=0))# 求中值
print("median:")
print(np.median(t))
print(np.median(t, axis=0))# 求最大值
print("max")
print(t.max())
print(t.max(axis=0))# 求最小值
print("min")
print(t.min())
print(t.min(axis=0))# 求极值, 即最大值和最小值之差
print("ptp")
print(np.ptp(t))
print(np.ptp(t, axis=0))# 求标准差
# 标准差是一组数据平均值分散程度的一种度量, 反映出数据的波动稳定情况, 越大表示波动越大, 约不稳定
# 一个较大的标准差, 代表大部分数值和其平均值之间差异较大
# 一个较小的标准差, 代表这些数值较接近平均值
print("std")
print(t.std())
print(t.std(axis=0))
[[ 1  2  3  4  5  6][ 7  8  9 10 11 12][13 14 15 16 17 18][19 20 21 22 23 24]]
sum:
300
[40 44 48 52 56 60]
mean:
12.5
[10. 11. 12. 13. 14. 15.]
median:
12.5
[10. 11. 12. 13. 14. 15.]
max
24
[19 20 21 22 23 24]
min
1
[1 2 3 4 5 6]
ptp
23
[18 18 18 18 18 18]
std
6.922186552431729
[6.70820393 6.70820393 6.70820393 6.70820393 6.70820393 6.70820393]
# nan缺失值填充均值t1 = np.arange(12).reshape((3, 4)).astype("float")
t1[1, 2:] = np.nan
print(t1)
print("*"*50)# 遍历每一列并计算每一列的nan数量
for i in range(t1.shape[1]):temp_col = t1[:,i]nan_num = np.count_nonzero(temp_col != temp_col)# 若存在nan, 则求不含nan的均值, 并将nan赋值为均值if nan_num != 0:temp_not_nan_col = temp_col[temp_col == temp_col]temp_col[np.isnan(temp_col)] = temp_not_nan_col.mean()
print(t1)
[[ 0.  1.  2.  3.][ 4.  5. nan nan][ 8.  9. 10. 11.]]
**************************************************
[[ 0.  1.  2.  3.][ 4.  5.  6.  7.][ 8.  9. 10. 11.]]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/724823.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript-1 (forEach方法)

--输出语句 document.write(文档输出内容) alert(警告对话框) console.log(控制台打印) --输入语句 prompt(请输入姓名:) JavaScript的书写位置 1.内联JavaScript <button onclick"alert(hello world!)">点击我</button> <button> 标签: …

flowable的java class task,也叫服务任务

源码地址12级程序猿-新年正当红/flowable-ui和服务任务 启动flowable-ui-app 浏览器输入下面的地址 http://localhost:8080/flowable-ui/#/ 在服务任务这里设置java类的路径 com.dmg.flowabledemo.task.MyServiceTask 当请假任务完成之后&#xff0c;自动触发这个服务任务…

Android开发社招面试总结,Android程序员面试必备的知识点

导语 学历永远是横在我们进人大厂的一道门槛&#xff0c;好像无论怎么努力&#xff0c;总能被那些985,211 按在地上摩擦&#xff01; 不仅要被“他们”看不起&#xff0c;在HR挑选简历&#xff0c;学历这块就直接被刷下去了&#xff0c;连证明自己的机会也没有&#xff0c;学…

synchronized 五连问

什么是synchronized? synchronized 是Java中用于实现线程同步的关键字&#xff0c;它可以确保多个线程在访问共享资源时不会发生冲突。 synchronized 关键字的一些主要用法? 修饰方法&#xff1a;当 synchronized 用于修饰方法时&#xff0c;它会将该方法变成同步方法&#…

关于Java并发多线程的一点思考

写在开头 在过去的2023年双11活动中&#xff0c;天猫的累计访问人次达到了8亿&#xff0c;京东超60个品牌销售破10亿&#xff0c;直播观看人数3.0亿人次&#xff0c;订单支付频率1分钟之内可达百万级峰值&#xff0c;这样的瞬间高并发活动&#xff0c;给服务端带来的冲击可想而…

什么职业适合报考CISP证书

CISP认证是当前中国信息安全行业中最主流、最专业的证书之一&#xff0c;具有很高的含金量。 那么&#xff0c;CISP认证的含金量高吗?哪些职位需要获得CISP证书?作为国家认证证书&#xff0c;CISP认证&#xff0c;当然&#xff0c;含金量&#xff0c;到底是多么高的含金量&a…

HplusAdmin ASP.NET基本权限管理系统

HplusAdmin 介绍 一套ASP.NET WebForm(不用控件) hplusasp.netsqlserver 基本权限管理系统 http://hplus.baocaige.top 暂不开源&#xff0c;需要的滴滴或者留下邮箱&#xff01;&#xff01;&#xff01; 账号 普通账号 账号&#xff1a;user 密码&#xff1a;Aa123456普…

运维随录实战(10)之上传Maven私服

1,通过第三方仓库(sonatype ossrh)上传,首先在官网注册账号: Loading... 2,新建issue 3,按照评论要求进行代码建立等 4,安装gpg,地址:Gpg4win - Download Gpg4win 相关命令: gpg --version 查看版本(是否安装成功) gpg --gen-key 生成公钥 gpg --keyserver hk…

swagger在java中的基本使用

自动生成接口文档&#xff0c;和在线接口测试的框架。 导入依赖 <!-- knife4j对swagger进行一个封装--><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><versi…

UE Snap01

获取指定文件目录下的所有文件 TArray<FString> LoadFilesPathFromDir(const FString& DirPath) {IFileManager& FileManager IFileManager::Get();TArray<FString> FilesPath;if (FileManager.DirectoryExists(*DirPath)){FileManager.FindFiles(FilesP…

阻塞队列、生产者消费者模型、阻塞队列的模拟实现等干货

文章目录 &#x1f490;生产者消费者模型&#x1f490;模拟实现阻塞队列&#x1f4a1;注意点一&#x1f4a1;注意点二 阻塞队列是一种“特殊”的数据结构&#xff0c;但是也遵循队列的“先进先出”特性&#xff0c;它的特殊在于&#xff1a; 阻塞队列的两个特性&#xff1a; 1…

【C++入门】引用

目录 6.引用 6.1引用概念 6.2引用的写法 6.3引用的特性 6.4常引用 6.5引用的使用场景 6.5.1引用做参数 6.5.2引用做返回值❗❗ &#x1f387;值做返回值 &#x1f387;引用做返回值 &#x1f387;引用在顺序表做返回值 6.5.3传值、传引用效率比较(参数&#xff0…

【OpenGL的着色器03】内置变量和函数(gl_Position等)

目录 一、说明 二、着色器的变量 2.1 着色器变量 2.2 着色器内置变量 三、最常见内置变量使用范例 3.1 常见着色器变量 3.2 示例1&#xff1a; gl_PointSize 3.3 示例2&#xff1a;gl_Position 3.4 gl_FragColor 3.5 渲染点片元坐标gl_PointCoord 3.6 gl_PointCoo…

Android Gradle开发与应用 (三) : Groovy语法概念与闭包

1. Groovy介绍 Groovy是一种基于Java平台的动态编程语言&#xff0c;与Java是完全兼容&#xff0c;除此之外有很多的语法糖来方便我们开发。Groovy代码能够直接运行在Java虚拟机&#xff08;JVM&#xff09;上&#xff0c;也可以被编译成Java字节码文件。 以下是Groovy的一些…

图像处理与视觉感知---期末复习重点(1)

文章目录 一、概述二、图像处理基础2.1 视觉感知要素2.2 像素间的一些基本关系2.2.1 相邻像素2.2.2 连通性2.2.3 距离度量 2.3 基本坐标变换2.4 空间变换与灰度值 一、概述 1. 图像的概念及分类。  图像是用各种观测系统以不同形式和手段观测客观世界而获得的、可以直接或间接…

nodejs版本管理工具nvm安装和环境变量配置

1、下载nvm.exe https://github.com/coreybutler/nvm-windows/releases2、安装 1.在D盘根目录新建一个dev文件夹&#xff0c;在dev里面再新建一个nodejs。 2.双击下载好的nvm.exe 修改文件路径&#xff0c;且路径中不能有中文 3.安装完成后在D:\dev\nvm打开settings.txt&…

大模型交互-超拟人合成

1、超拟人合成&#xff1a;将文字转化为自然流畅的人声&#xff0c;在实时语音合成的基础上&#xff0c;精准模拟人类的副语言现象&#xff0c;如呼吸、叹气、语速变化等&#xff0c;使得语音不仅流畅自然&#xff0c;更富有情感和生命力。 2、唤醒的持久运行--->合成能力加…

kerberos学习系列一:原理

1、简介 Kerberos 一词来源于古希腊神话中的 Cerberus —— 守护地狱之门的三头犬。 Kerberos 是一种基于加密 Ticket 的身份认证协议。Kerberos 主要由三个部分组成&#xff1a;Key Distribution Center (即KDC)、Client 和 Service。 优势&#xff1a; 密码无需进行网络传…

Docker数据卷篇

1. 数据卷&#xff08;容器数据管理&#xff09; 引言&#xff1a;在之前的nginx案例中&#xff0c;修改nginx的html页面时&#xff0c;需要进入nginx内部。并且因为没有编辑器&#xff0c;修改文件也很麻烦。 这就是因为容器与数据&#xff08;容器内文件&#xff09;耦合带…

Scrapy与分布式开发(3):Scrapy核心组件与运行机制

Scrapy核心组件与运行机制 引言 这一章开始讲解Scrapy核心组件的功能与作用&#xff0c;通过流程图了解整体的运行机制&#xff0c;然后了解它的安装与项目创建&#xff0c;为后续实战做好准备。 Scrapy定义 Scrapy是一个为了爬取网站数据、提取结构性数据而编写的应用框架…