使用numpy对数组求平均时如何忽略nan值
目录
- numpy对数组求平均时忽略nan值
- 使用np.mean()的效果
- 使用np.nanmean()的效果
- numpy含nan值进行归一化操作
- 方法一
- 方法二
numpy对数组求平均时忽略nan值 在对numpy数组求平均np.mean()或者求数组中最大最小值np.max()/np.min()时,如果数组中有nan,此时求得的结果为:nan,那么该如何忽略其中的nan呢?
此时应该用另一个方法
np.nanmean()
,np.nanmax()
,np.nanmin()
使用np.mean()的效果
文章图片
使用np.nanmean()的效果
【使用numpy对数组求平均时如何忽略nan值】
文章图片
numpy含nan值进行归一化操作
方法一
import numpy as npA = np.array([[7,4,5,7000],[1,900,9,nan],[5, -1000, nan,100],[nan,nan,3,1000]])#Compute NaN-normsL1_norm = np.nansum(np.abs(A), axis=1)L2_norm = np.sqrt(np.nansum(A**2, axis=1))max_norm = np.nanmax(np.abs(A), axis=1)#Normalize rowsA_L1 =A / L1_norm[:,np.newaxis] # A.values if DataframeA_L2 =A / L2_norm[:,np.newaxis]A_max = A / max_norm[:,np.newaxis]#Check that it workedL1_norm_after = np.nansum(np.abs(A_L1), axis=1)L2_norm_after = np.sqrt(np.nansum(A_L2**2, axis=1))max_norm_after = np.nanmax(np.abs(A_max), axis=1) In[182]: L1_norm_afterOut[182]: array([1., 1., 1., 1.]) In[183]: L2_norm_afterOut[183]: array([1., 1., 1., 1.]) In[184]: max_norm_afterOut[184]: array([1., 1., 1., 1.])
方法二
rom numpy import nan, nanmeanfrom sklearn.preprocessing import StandardScalerscaler = StandardScaler()A = [[7,4,5,7000],[1,900,9,nan],[5, -1000, nan,100],[nan,nan,3,1000]]scaler.fit(A)In [45]: scaler.mean_Out[45]: array([4.33333333,-32.,5.66666667, 2700.])In [46]: scaler.transform(A)Out[46]: array([[ 1.06904497,0.04638641, -0.26726124,1.40399977],[-1.33630621,1.20089267,1.33630621,nan],[ 0.26726124, -1.24727908,nan, -0.84893009],[nan,nan, -1.06904497, -0.55506968]])In [54]: nanmean(scaler.transform(A), axis=0)Out[54]: array([ 1.48029737e-16,0.00000000e+00, -1.48029737e-16,0.00000000e+00])
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
推荐阅读
- 布丽吉特,人生绝对的赢家
- 进必趋|进必趋 退必迟,问起对 视勿移
- 对称加密和非对称加密的区别
- 由浅入深理解AOP
- 【译】20个更有效地使用谷歌搜索的技巧
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- 对抗抑郁最好的方法
- 装聋作哑,关系融洽