通用函数(ufunc)是一种对ndarray中的数据执行元素级运算的函数。
函数 | 说明 |
---|---|
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的真值,相当于 |
函数 | 说明 |
---|---|
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 | 执行元素级的真值逻辑运算。相当于& | |
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)
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 | 累计和、累计积 |
any用于测试数组中是否存在一个或多个True
all用于检查数组中所有值是或否都为True
bools = np.array([False, False, True, False])
>> bools.any()
True
>> bools.all()
False
NumPy数组可通过sort方法直接排序,对于多维数组可在任何一个轴上进行排序,只需传入轴编号
计算数组分位数,只需先排序,再选特定位置的值
arr = randn(100)
arr.sort()
arr[int(0.05*len(arr))] # 计算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 返回该布尔型数组第一个最大值的索引