NumPy基础--常用函数

通用函数

通用函数(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除法或向下圆整除法(丢弃余数)
powerA的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.where
result = 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.where
np.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,qr
X = 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 random
position = 0
walk = [position]
steps = 1000
for i in xrange(steps):
    step = 1 if random.randit(0, 1) else -1
    position += step
    walk.append(position)
# 第一个到达某个特定值的时间
(np.abs(walk) >= 10).argmax() #argmax 返回该布尔型数组第一个最大值的索引
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值