NumPy基础--常用函数

来源:互联网 发布:路由器端口转发安全 编辑:程序博客网 时间:2024/05/16 12:42

      • 通用函数
        • 一元ufunc
        • 二元ufunc
      • 矢量计算
        • numpywhere
        • 统计方法
        • 用于布尔型数组的方法
        • 排序
        • 唯一化和其他的集合逻辑
      • 线性代数
      • 生成随机数

通用函数

通用函数(ufunc)是一种对ndarray中的数据执行元素级运算的函数。

1. 一元ufunc

函数 说明 abs、fabs 计算整数、浮点数或复数的绝对值 sqrt 计算各元素平方根 square 计算各元素平方 exp 计算各元素的指数 log、log10、log2、log1p 分别为自然对数(底数为e)、底数为10的log、底数为2的log、log(1+x) sign 计算各元素的正负号 ceil 计算各元素的ceiling值,即大于等于该值的最小整数 floor 计算各元素的floor值,即小于等于该值的最大整数 rint 将各元素值四舍五入到最接近的 modf 将数组的小数和整数部分以两个独立的数组形式返回 isnan “哪些值是NaN” 返回布尔值 isfinite、isinf “哪些元素是有穷的” “哪些元素是无穷的” cos、cosh、sin、sinh、tan、tanh 普通型和双曲型三角函数 arccos、arccosh、arcsin、arcsinh、arctan、arctanh 反三角函数 logical_not 计算各元素not x的真值,相当于

2. 二元ufunc

函数 说明 add 元素相加 subtract 从第一个数组中减去第二个数组的元算 multiply 元素相乘 divide、floor_divide 除法或向下圆整除法(丢弃余数) power A的b次方 maximum、fmax 元素级的最大值计算。fmax将忽略nan minimum、fmin 元素级的最小值计算。fmin将忽略nan mod 元素级的求模计算(除法) copysign 将第二个数组中的值的符号复制给第一个数组中的 greater、greater_equal、less、less_equal、equal、not_equal 执行元素级的比较运算,产生布尔型数组 logical_and、logical_or、logical_xor 执行元素级的真值逻辑运算。相当于& |

矢量计算

1. numpy.where

xarr = np.array([1, 2, 3, 4, 5])yarr = np.array([6, 7, 8, 9, 19])cond = np.array([True, False, True, True, False])# 第一种写法,对大数组的处理速度比较慢result = [(x if c else y)           for x, y, c in zip(xarr, yarr, cond)]# numpy.whereresult = np.where(cond, xarr, yarr)

对于比较复杂的逻辑,where可以更加简洁的表示

# 第一种写法result = []for i in range(n):    if cond1[i] and cond2[i]:      result.append(0)    elif cond1[i]:      result.append(1)    elif cond2[i]:      result.append(2)    eles:      result.append(3)# numpy.wherenp.where(cond1 & cond2, 0,             np.where(cond1, 1,                  np.where(cond2, 2, 3)))# 算术运算result = 1 * (cond1 - cond2) + 2 * (cond2 & - cond1) + 3 * -(cond1 | cond2)

2. 统计方法

sum、mean、std等聚合计算,这类函数可以接受一个axis参数(用于计算该轴向上的统计值)

arr = np.random.randn(5, 4)>> arr.mean()0.062814911084854597>> np.mean(arr)0.062814911084854597>> arr.mean(axis = 1)array([-1.2833, 0.2844, 0.6574, 0.06743, -0.0187])>> arr.sum(0)array([-3.1003, -1.6189, 1.4044, 4.5712])

cumsum和cumprod之类的方法则不聚合,而是产生一个由中间结果组成的数组

arr = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])# 传入的0,1参数为axis 表示累乘累和的轴>> arr.cumsum(0)array([[0, 1, 2],       [3, 5, 7],       [9, 12, 15]])>> arr.cumprod(1)array([[0, 0, 0],       [3, 12, 60],       [6, 42, 336]])

基本数组统计方法

函数 说明 sum 对数组中全部或某轴向的元素。零长度的数组sum为0 mean 算数平均数。零长度的数组mean为nan std、var 标准差、方差 min、max 最大值、最小值 argmin、argmax 最大和最小元素的索引 cumsum、cumprod 累计和、累计积

3. 用于布尔型数组的方法

any用于测试数组中是否存在一个或多个True

all用于检查数组中所有值是或否都为True

bools = np.array([False, False, True, False])>> bools.any()True>> bools.all()False

4. 排序

NumPy数组可通过sort方法直接排序,对于多维数组可在任何一个轴上进行排序,只需传入轴编号

计算数组分位数,只需先排序,再选特定位置的值

arr = randn(100)arr.sort()arr[int(0.05*len(arr))] # 计算5%分位数

5. 唯一化和其他的集合逻辑

函数 说明 unique(x) 计算x中的唯一元素,并返回有序结果 intersect1d(x, y) 计算x和y的公共元素,并返回有序结果 union1d(x, y) 计算x和y的并集,并返回有序结果 in1d(x, y) 得到一个表示x的元素是否包含于y的布尔型数组 setdiff1d(x, y) 集合的差,即元素在x中且不在 setxor1d(x, y) 集合的对称差,即存在于一个数组中但不同时存在于两个数组中的元素

例如:

arr = np.array([3, 3, 2, 2, 1, 1, 4])>>np.unique(arr)array([1, 2, 3, 4])# 等价于>> sorted(set(arr))array([1, 2, 3, 4])# np.in1d 测试一个数组中的值在另一个数组中的成员资格>> np.in1d(arr, [2, 3, 6])array([True, True, True, True, False, False, False])

线性代数

常用的numpy.linalg函数

函数 说明 diag 以一维数组的形式返回方针的对角线元素,或将一维数组转换为方阵(非对角线元素为) dot 矩阵乘法 trace 计算对角线元素的和 det 计算矩阵行列式 eig 计算方阵的本征值和本征 inv 计算方阵的逆 pinv 计算矩阵的Moore-Penrose伪逆 qr 计算QR分解 svd 计算奇异值分解(SVD) solve 解线性方程组Ax = b, 其中A为一个方阵 lstsq 计算Ax = b的最小二乘解

例如:

from numpy.linalg import inv,qrX = randn(5, 5)mat = X.T.dot(X)inv(mat)mat.dot(inv(mat))# qr分解q, r = qr(mat)

生成随机数

numpy.random函数

函数 说明 seed 确定随机数生成器 permutation 返回一个序列的随机排序或返回一个随机排列的范围 shuffle 对一个序列就地随机排列 rand 产生均匀分布的样本值 randint 从给定的上下限范围内随机选取整数 randn 产生正态分布(平均值为0,标准差为1)的样本值 binomial 产生二项分布的样本值 normal 产生正态分布的样本值 beta 产生beta分布的样本 chisquare 产生卡方分布的样本值 gamma 产生gamma分布的样本值 uniform 产生在[0,1)中均匀分布的样本值

例如:

# 生成标准正态分布的4*4样本数组samples = np.random.normal(size=(4, 4))# 从0开始,步长1和-1出现概率相等import randomposition = 0walk = [position]steps = 1000for i in xrange(steps):    step = 1 if random.randit(0, 1) else -1    position += step    walk.append(position)# 第一个到达某个特定值的时间(np.abs(walk) >= 10).argmax() #argmax 返回该布尔型数组第一个最大值的索引
原创粉丝点击