numpy中np.nanmax和np.max的区别及坑
这篇文章主要介绍了numpy中np.nanmax和np.max的区别及坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
目录
np.nanmax和np.array([1,2,3,np.nan]).max()的区别
原理
速度区别
numpy中nan和常用方法
np.nanmax和np.array([1,2,3,np.nan]).max()的区别
numpy中numpy.nanmax的官方文档
原理
在计算dataframe最大值时,最先用到的一定是Series对象的max()方法(),最终结果是4。
1 2 | s1 = pd.Series([ 1 , 2 , 3 , 4 ,np.nan]) s1_max = s1. max () |
但是笔者由于数据量巨大,列数较多,于是为了加快计算速度,采用numpy进行最大值的计算,但正如以下代码,最终结果得到的是nan,而非4。发现,采用这种方式计算最大值,nan也会包含进去,并最终结果为nan。
1 2 3 | s1 = pd.Series([ 1 , 2 , 3 , 4 ,np.nan]) s1_max = s1.values. max () >>>nan |
通过阅读numpy的文档发现,存在np.nanmax的函数,可以将np.nan排除进行最大值的计算,并得到想要的正确结果。
当然不止是max,min 、std、mean 均会存在列中含有np.nan时,s1.values.min /std/mean ()返回nan的情况。
速度区别
速度由快到慢依次:
1 2 3 | s1 = pd.Series([ 1 , 2 , 3 , 4 , 5 ,np.nan]) #速度由快至慢 np.nanmax(s1.values) > np.nanmax(s1) > s1. max () |
numpy中nan和常用方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #!/usr/bin/env python # -*- coding:utf-8 -*- # Author: Jia ShiLin import numpy as np a = np.arange( 9 , dtype = float ).reshape( 3 , 3 ) a[[[ 1 ], [ 2 ]]] = np.nan print (a) # isnan函数 print (np.isnan(a)) a[np.isnan(a)] = 0 # 把nan替换成中值或者均值 print (a) print (np.count_nonzero(a)) # sum()统计求和 b = np.arange( 12 , dtype = int ).reshape( 2 , 6 ) print (b) print (np. sum (b, axis = 0 )) # 得到结果和行的形状一样 print (np. sum (b, axis = 1 )) # .mean() print (b.mean()) print (b.mean(axis = 0 )) print (b.mean(axis = 1 )) # np.median()中位数 print (np.median(b, axis = 0 )) # .min() .max() # .ptp()机值 print (np.ptp(b)) # .std()标注差 print (np.std(b, axis = 0 )) |
以上为个人经验,希望能给大家一个参考
原文链接:https://blog.csdn.net/xu136090331/article/details/94667987