zoukankan      html  css  js  c++  java
  • numpy基本操作3

    python中的NAN和inf

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

    什么时候出现NAN呢:

    当我们读取本地文件为float的时候,数据有缺失的情况下,这个缺失的数据就会被填补成NAN,还有一种情况是出现了不合理的运算:无穷大减去无穷大,无穷小减去无穷小;

    inf : 表示无穷大, -inf表示无穷小。

    什么时候出现inf呢:

    一个数字除以0的时候。inf也是float类型。

    NAN 的性质:

      1. 两个NAN不相等,这个性质可以计算出一个数组中NAN的个数

        t1 = np.array(np.random.uniform(1,5,(4,5)))
        t1[2,3] = np.nan
        t1[1,3] = np.nan
        print(np.count_nonzero(t1 == t1))
       print(np.count_nonzero(t1 != t1))
      #答案是18和2

      2. nan和任何数值进行计算都是nan,顺便看一下怎么求均值和中值

        t1 = np.array(np.random.uniform(1,5,(4,5)))
        t1[2,3] = np.nan
        t1[1,3] = np.nan
        print(t1)
        print(np.count_nonzero(t1 != t1))
        #求中值和均值
        means = np.mean(t1,axis=0) #每列的均值
        print(means)
        median = np.median(t1,axis=1) #每行的中值
        print(median)

     做一道作业题:

    把一个数组中是nan的用均值替换。

    def fill_nan_use_means(t1):
        for i in range(t1.shape[1]):   #按照列来遍历
            col_temp = t1[:,i] #取出第i列
            nan_num = np.count_nonzero(col_temp != col_temp) #计算出每列的nan的个数
            if nan_num != 0: #如果存在nan
                print("#"*100)
                temp_not_nan_col = col_temp[col_temp == col_temp] #就把非nan的列整理出给temp_not_nan_col
                print(temp_not_nan_col)
                print("#" * 100)
                col_temp[np.isnan(col_temp)] = temp_not_nan_col.mean() #把是nan的位置用均值来代替
        return t1
    if __name__ == '__main__':
        t1 = np.random.randint(1,10,(4,5)).astype(float)
        t1[1:3,2:3] = np.nan
        print("*"*30,"填充前","*"*30)
        print(t1)
        t1 = fill_nan_use_means(t1)
        print("*" * 30, "填充后", "*" * 30)
        print(t1)

      

  • 相关阅读:
    为什么我们不能坚持到底?
    追从本心,笑斩荆棘
    走出浮躁的泥沼:关于技术与工作
    走出浮躁的泥沼:仅专注就能胜过大部分人
    学不进去?可以试着这么做……
    走出浮躁的泥沼:浮躁的社会原因
    spring-quartz.xml
    1 web.xml配置详解
    多线程学习二
    多线程学习
  • 原文地址:https://www.cnblogs.com/boost/p/14320600.html
Copyright © 2011-2022 走看看