numpy中处理含nan数据的统计函数及其效率
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了numpy中处理含nan数据的统计函数及其效率相关的知识,希望对你有一定的参考价值。
参考技术A numpy 库中的一些统计函数,它们在遇到含 nan 的数据时都无法正常使用,需要换成可用的同名函数(即在函数名前加“nan”)。沿指定轴返回一个数组的最小 / 大值。
numpy.max(a, axis=None, out=None, keepdims=<no value>)
参数:
a - array_like ,数组或者可以转化成数组的对象
axis - 无 None(默认)、整型 int、元组 tuple;沿轴线方向的操作方式
计算数组中沿指定方向上的第q 数值百分位(点),可以计算多维数组的任意百分比分位数
numpy.percentile(a, q, axis=None, out=None, overwrite_input=False, interpolation='linear', keepdims=False)
参数:
a - array_like ,数组或者可以转化成数组的对象
q - [ 0., 100. ] 百分位
overwrite_input - bool 型参数,为 True 并且 a 的类型是ndarray,则 a 将被部分后者全部排序
axis - 无 None(默认)、整型 int、元组 tuple;沿轴线方向的操作方式
计算数组 a 在沿 axis 轴方向上的中位数
numpy.median(a, axis=None, out=None, overwrite_input=False, keepdims=False)
参数:
a - array_like ,数组或者可以转化成数组的对象
overwrite_input - bool 型参数,为 True 并且 a 的类型是ndarray,则 a 将被部分后者全部排序
axis - 无 None(默认)、整型 int、元组 tuple;沿轴线方向的操作方式
沿指定轴计算数组的标准偏差。
numpy.std(a, axis=None, dtype=None, out=None, ddof=0, keepdims=<no value>)
参数:
a - array_like ,数组或者可以转化成数组的对象
ddof - 自由度,计算时的分母为 N(数据数量) - ddof,默认 ddof = 0
axis - 无 None(默认)、整型 int、元组 tuple;沿轴线方向的操作方式
沿指定轴计算数组的方差 var 【 = mean(abs(x - x.mean()) ** 2)】。
numpy.var(a, axis=None, dtype=None, out=None, ddof=0, keepdims=<no value>)
参数:
a - array_like ,数组或者可以转化成数组的对象
ddof - 自由度,计算时的分母为 N(数据数量) - ddof,默认 ddof = 0
axis - 无 None(默认)、整型 int、元组 tuple;沿轴线方向的操作方式
在含有 nan 数值的数组上采用不带 “nan”前缀的统计函数处理,结果都是返回 nan ,需要换成带 “nan”前缀的同名统计函数处理。
以取包含 nan 的数组里的最大值为例,有以下方法
其中,第 2、3 个的时间差几乎为0,看看耗时到底多少?
可见,耗时最多的是 直接对 Series 取 .max(),耗时最少的是用 np.max() 求数组的最大值。
其他函数也类似。
参考资料:
1、 numpy 统计函数
2、 numpy的np.nanmax和np.array([1,2,3,np.nan]).max()的区别(坑)
numpy数学数据处理
数学和统计方法
- sum 对数组中全部或某轴向的元素求和。零长度的数组的sum为0。
- mean 算术平均数。零长度的数组的mean为NaN。
import numpy as np import numpy.random as np_random arr = np.random.randn(5,4) print(arr) print(arr.sum()) #求总和:所有元素相加 print(arr.mean()) #求平均值:所有元素相加后除以元素总数 print(arr.mean(axis=1)) print(arr.cumsum(0))
- std, var 分别为标准差和方差,自由度可调(默认为n)。
- min, max 最大值和最小值
- argmin 分别为最大值和最小值的索引
- cumsum 所有元素的累计和
- cumprod 所有元素的累计积
Any、All测试布尔型数组
bools = np.array([False,True,False,False]) print(bools.any()) #有一个为True就返回True print(bools.all()) #所有为True返回True
sort排序
arr = np_random.randn(8) arr.sort() print(arr) arr = np_random.randn(5,3) arr.sort(1) #指定轴排序
去重与其他集合运算
- unique(x) 计算x中的唯一元素,并返回有序结果。
- intersect1d(x, y) 计算x和y中的公共元素,并返回有序结果。
- union1d(x, y) 计算x和y的并集,并返回有序结果。
- in1d(x, y) 得到一个表述"x的元素是否包含于y"的布尔型数组
- setdiff1d(x, y) 集合的差,即元素在x中且不在y中
- setxor1d(x, y) 集合的异或,即存在于一个数组中但不同时存在于两个数组中的元素。
-
names = np.array([‘Bob‘, ‘Joe‘, ‘Will‘, ‘Bob‘, ‘Will‘, ‘Joe‘, ‘Joe‘]) print(np.unique(names)) #Bob‘, ‘Joe‘, ‘Will‘ ints = np.array([3, 3, 3, 2, 2, 1, 1, 4, 4]) print(np.unique(ints)) #1 2 3 4 #‘查找数组元素是否在另一数组‘ values = np.array([6, 0, 0, 3, 2, 5, 6]) print(np.in1d(values, [2, 3, 6]))
以上是关于numpy中处理含nan数据的统计函数及其效率的主要内容,如果未能解决你的问题,请参考以下文章