Numpy个人知识体系
儒冠多误身
20181202
文章目录
- 通用函数ufunc
- 对ndarray中元素运算的函数
一元函数 unary ufunc
-
一元ufunc 说明 np.abs()、np.fbs() 计算整数、浮点数或复数的绝对值。
对于非复数值,可以使用更快的fbsnp.sqrt() 计算各元素的平方根:arr ** 0.5 np.square() 计算各元素的平方:arr ** 2 np.exp() 计算各元素的指数ex np.log()\np.log10\np.log2\np.log1p 分别:自然对数(e为底数),底数为10的log,底数为2的log,log(1+x) np.sign() 计算各元素的正负号:1(正数),0(零),-1(负数) np.ceil() 向上取整 np.floor() 向下取整 np.rint() 四舍五入取整 np.modf() 小数部分和正数部分以两个独立数组返回arr1,arr2 = np.modf(arr3) np.isnan() 返回一个布尔型数组:“哪些值是NaN" np.isfinite()\np.isinf() 返回布尔型数组:哪些元素是有穷的,哪些元素是无穷的 np.cos()\np.sin()\np.tan() 普通型三角函数 np.cosh()\np.sinh()\np.tanh() 双曲型三角函数 np.arccos()\np.arcsin()\np.arctan() 反三角函数 np.arccosh()\np.arcsinh()\np.arctanh() 反三角函数 np.logical_not() 计算各元素not x的真值
相当于-arr
二元函数 binary ufunc
-
二元ufunc 说明 np.add(arr1,arr2) 将数组对应元素相加 np.subtract() 从第一个数组中,减去第二个数组中的元素 np.multiply() 数组元素相乘 np.divide() 除法 np.floor_divide() 向下圆整除法(丢弃余数) np.power() 对第一个数组中的元素A,根据第二个数组中相应元素B,计算AB np.maximum() 元素级的最大值计算 np.fmax() 忽略NaN的,元素级的最大值计算 np.minimum() 元素级的最小值计算 np.fmin() 忽略NaN的,元素级的最小值计算 np.mod() 元素级的求模计算(除法的余数) np.copysign() 将第二个数组中的值的符号赋值给第一个数组中的值 np.greater() 执行元素级的比较>,产生布尔型数组 np.greater_equal() 执行元素级的比较>=,产生布尔型数组 np.less() 执行元素级的比较<,产生布尔型数组 np.less_equal() 执行元素级的比较<=,产生布尔型数组 np.equal() 执行元素级的比较==,产生布尔型数组 np.not_equal() 执行元素级的比较!=,产生布尔型数组 np.logical_and() 执行元素级的真值逻辑元素:& ,且 np.logical_or() 执行元素级的真值逻辑元素:|,或 np.logical_xor 执行元素级的真值逻辑元素:^,异或
矢量化三元表达式 np.where(arr1,第二个参数,第三个参数)
-
第二个和第三个参数不必是数组,可以是标量值
-
相当于
x if condition else y
的矢量化版本 -
np.where(arr1>0,1,-1)# 元素>0的返回1,否则返回-1
-
类似于MySQL的控制流函数
-
select education,salary,case education when '大专' then 1 when '本科' then 2 when '硕士' then 3 when '博士' then 4 else 0 end as tmp from demp_table;
-
相当于MySQL的三元表达式
-
select education,if(salary > 9,'优先','等待') as tmp from demp_talbe;
-
python的三元表达式结果1 if 表达式 else 结果2
-
a = 10 b = 20 r = a if a>b else b
-
python列表推倒时
-
list1 = [i*i for i in range(2,11,2)]#生成1~10之间的所有偶数
统计函数
arr.mean(axis = 1)# 可接受axis参数
np.mean(arr)# 均值
arr.sum(axis = 1)
np.sum(arr)
arr.std(axis = 1)#标准差,通过axis选择轴
np.std(arr)
arr.var()#方差
np.var(arr)
arr.max(axis = 1)
np.max(arr)
arr.min(axis = 1)
np.min(arr)
arr.argmin()#最小元素的索引
np.argmin(arr)
arr.argmax()#最大元素的索引
np.argmax(arr)
arr.cumsum(0)# 列累加
arr.cumprod(1)# 行累积
创建
从列表、元组创建
np.array(list\tuple,dtype = np.float64)# 从序列创建,并指定每个元素的数据类型
使用numpy函数创建
np.arange(12).reshape(3,4)#返回ndarray取值[0,12),3行4列
np.ones((3,4))# 全1数组,3行4列
np.ones((2,3,4))# 最外层2个元素,每个元素3个维度,每个维度4个元素
np.zeros((3,4))# 全0数组,3行4列
np.full((2,3),val)#生成2行3列的数组 ,值都是val
np.eye(n)# 生成n*n的单位矩阵,对角线元素都是1,其余都是0
np.ones_like(arr) # 根据arr的形状,生成全1的ndarray
np.zeros_like(arr) # 根据arr的形状,生成全0的数组
np.full_like(arr,val) #根据arr的形状,生成值都为val的数组
np.linspace(1,10,4) # 包括1和10,等间隔的生成4个元素的数组,浮点数
np.linspace(1,10,4,endpoint = False) #元素10不作为生成数组的元素
np.concatenate((arr1,arr2)) # 合并数组arr1和arr2
随机数组
随机生成
-
np.random.rand(d0,d1,……,dn)
-
生成[0,1)之间的数据
-
np.random.rand(3,4) np.random.rand(2,3,4)#最外层2个元素,每个元素3个维度,每个维度4个元素
-
-
np.random.randn(d0,d1,……,dn)
- 返回数据,具有 标准正态分布(高斯分布)
- 均值为1,标准差为0
-
np.random.randint(low[high,shape,dtype])
-
返回随机整数,范围:[low,high)
-
shape:数组维度
-
dtype:数据类型,默认np.int
-
high不填时,范围[0,low)
-
np.random.randint(-5,5,size=(2,2)) np.random.randint(1,5)# 返回1个[1,5)之间的随机整数
-
-
np.random.seed(s)
-
使产生的随机数组不变
-
np.random.seed(1) np.random.randint(100,200,(3,4)) #放在一起,再次调用,产生的随机数组元素不变
-
随机排列
- np.random.shuffle(arr)
- 根据数组arr的第1轴进行随机排序
- 会改变数组arr
- np.random.permutation(arr)
- 根据arr的第1轴产生一个新的乱序数组
- arr不变
- np.random.choice(arr[,size,replace,p])
- 从一维数组arr中以概率p抽取元素,形成size形状的数组
- replace表示是否可以重用元素
- p
- 设置元素被抽取的概率
- eg,p = arr/np.sum(arr)
随机分布
-
np.random.uniform(low,high,size)
- 产生具有均匀分布的数组
- low 起始值
- high 结束值
- size 形状
-
np.random.normal(loc.scale,size)
-
产生具有正态分布的数组
-
loc 均值
-
scale 标准差
-
size 形状
-
np.random.normal(9,2,50)#创建 包含50个元素的数组,且均值9,标准差2
-
-
np.random.poisson(lam.size)
- 产生泊松分布的数组
- lam 随机事件发生概率
- size 形状