Python-numpy中常用的统计函数及转换函数

numpy中常用统计函数

numpy普通统计函数

-🍑 np.average是加权平均值,而我们平时所说的平均值用np.mean()。
-🍑 通过指定axis参数,可以对多维数组的特定轴进行统计。
-🍑 axis=0:按列计算, axis=1:按行计算。

函数描述示例代码
np.sum()计算数组元素的总和np.sum(arr), arr.sum()
np.mean()计算平均值np.mean(arr), arr.mean()
np.median()计算中位数np.median(arr), arr.median()
np.min()计算最小值np.min(arr), arr.min()
np.max()计算最大值np.max(arr), arr.max()
np.argmin()返回最小值的索引np.argmin(arr), arr.argmin()
np.argmax()返回最大值的索引np.argmax(arr), arr.argmax()
np.ptp()计算(最大值 - 最小值)np.ptp(arr), arr.ptp()
np.std()标准差np.std(arr), arr.std()
np.average()加权平均值np.average(arr)
code:
import numpy as np

arr = np.array([1, 2, 3])
weights = np.array([0.1, 0.3, 0.6])
print(np.average(arr, weights=weights))  # 1*0.1+2*0.3+3*0.6

result:
2.5

忽略 NaN 值进行统计

函数描述示例代码
np.nansum()忽略 NaN 计算总和np.nansum(arr)
np.nanmean()忽略 NaN 计算均值np.nanmean(arr)
np.nanstd()忽略 NaN 计算标准差np.nanstd(arr)

百分位数

  • 🍓 百分位数是统计分析中常用的指标。
  • 🍓 例如中位数(第 50 百分位数)、四分位数(第 25、50、75 百分位数)。
  • 🍓 会自动对原来的数据进行排序,并且进行插值。
  • 🍓 0-100用percentile,0-1用quantile。
函数描述示例代码
np.percentile()计算指定百分位数的值np.percentile(arr, q=25)
np.quantile()计算指定分位数的值(0-1 范围)np.quantile(arr, q=0.25)
code:
import numpy as np

arr = np.array([1, 2, 3])
res_linear = np.percentile(arr, q=70, interpolation="linear")  # 线性插值
res_lower = np.percentile(arr, q=70, interpolation="lower")  # 取较小值
res_higher = np.percentile(arr, q=70, interpolation="higher")  # 取较大值
res_nearest = np.percentile(arr, q=70, interpolation="nearest")  # 取最近值
res_midpoint = np.percentile(arr, q=70, interpolation="midpoint")  # 取中间值

print(f"res_linear={res_linear}, res_lower={res_lower}, res_higher={res_higher},"
      f" res_nearest={res_nearest}, res_midpoint={res_midpoint},")

result:
res_linear=2.4, res_lower=2, res_higher=3, res_nearest=2, res_midpoint=2.5

numpy中形状转换函数

重塑数组(reshape)

  • 🌹 不改变数组数据的前提下,对数组的维度进行重新调整。
  • 🌹 numpy.reshape(arr, newshape, order=‘C’)或者arr.reshape(newshape, order=‘C’)。
  • 🌹 元素数量要匹配.
  • 🌹 灵活的维度指定:在newshape里,至多可以有一个维度的值设为-1。
  • 🌹 reshape返回的是原数组的一个视图,如果视图的数据被改变,原数据也会改变
code:
import numpy as np

arr1 = np.array([1,2,3,4,5,6,7,8])
arr2 = arr1.reshape(2, 4)
arr3 =  arr2.copy()
arr2[1,2]=666
arr3.reshape(4, -1)
print("arr1:\n", arr1)
print("arr2:\n", arr2)
print("arr3:\n", arr3)

result:
arr1:
 [  1   2   3   4   5   6 666   8]
arr2:
 [[  1   2   3   4]
 [  5   6 666   8]]
arr3:
 [[1 2 3 4]
 [5 6 7 8]]

展平数组(flatten/ravel)

-🍎 flattened = reshaped.flatten() , 返回副本。
-🍎 raveled = reshaped.ravel() , # 返回视图(修改会影响原数组)。

code:
import numpy as np

arr1 = np.array([1,2,3,4,5,6,7,8])
arr2 = arr1.reshape(4, -1)
arr3 = arr2.flatten()
arr4 = arr2.ravel()
arr3[4] = 666 # arr3的改变并不影响arr1和arr2
arr4[0] = 168  # arr4的改变引起arr1和arr2的改变

print("arr1:\n", arr1)
print("arr2:\n", arr2)
print("arr3:\n", arr3)
print("arr4:\n", arr4)

result:
arr1:
 [168   2   3   4   5   6   7   8]
arr2:
 [[168   2]
 [  3   4]
 [  5   6]
 [  7   8]]
arr3:
 [  1   2   3   4 666   6   7   8]
arr4:
 [168   2   3   4   5   6   7   8]

转置(transpose/T)

  • 🍐 transpose()和转置运算符T用于交换数组的维度。
  • 🍐 会反转数组的维度顺序(例如,形状从 (a, b, c) 变为 (c, b, a))
  • 🍐 transpose() 和 T 通常返回原数组的视图,而非副本。修改转置后的数组会影响原数组。
code:
import numpy as np

arr1 = np.arange(24).reshape(2, 3, 4)
print("arr1:\n", arr1)
print(arr1.shape)

arr2 = arr1.T
print("arr2:\n", arr2)
print(arr2.shape)

result:
arr1:
 [[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
(2, 3, 4)
arr2:
 [[[ 0 12]
  [ 4 16]
  [ 8 20]]

 [[ 1 13]
  [ 5 17]
  [ 9 21]]

 [[ 2 14]
  [ 6 18]
  [10 22]]

 [[ 3 15]
  [ 7 19]
  [11 23]]]
(4, 3, 2)
code:
import numpy as np

arr1 = np.array([list(range(1, 4)), list(range(11, 44, 11))])
arr2 = arr1.transpose()
arr2[1,1] = 666

print("arr1:\n", arr1)
print("arr2:\n", arr2)

result:
arr1:
 [[  1   2   3]
 [ 11 666  33]]
arr2:
 [[  1  11]
 [  2 666]
 [  3  33]]

数据类型的转换

使用astype()转换类型

  • 🍍 原数据类型并不发生变化。
  • 🍍 可以直接实现字符串到数字的转化。
code:
import numpy as np

arr1 = np.array([1.5, 2.3, 3.7])
arr2 = arr1.astype(int)  # 截断小数部分,输出:[1 2 3]
arr3 = arr1.astype(bool)  # 非零值转为True,输出:[ True  True  True]
print("arr1:\n", arr1)
print("arr2:\n", arr2)
print("arr3:\n", arr3)

result:
arr1:
 [1.5 2.3 3.7]
arr2:
 [1 2 3]
arr3:
 [ True  True  True]
code:
import numpy as np

arr1 = np.array(['1', '2', '3'])
arr2 = arr1.astype(int)  # 转为整数:[1 2 3]
arr3 = arr2.astype(str)

print("arr1:\n", arr1)
print("arr2:\n", arr2)
print("arr3:\n", arr3)

result:
arr1:
 ['1' '2' '3']
arr2:
 [1 2 3]
arr3:
 ['1' '2' '3']

元素值转换

  • 🌼 四舍五入
  • 🌼 向上 / 向下取整
code:
import numpy as np

arr1 = np.array([1.4945, 2.5245, 3.5221])
arr2 = np.round(arr1, 2)
arr3 = np.floor(arr1)
arr4 = np.ceil(arr1)

print("arr1:\n", arr1)
print("arr2:\n", arr2)
print("arr3:\n", arr3)

result:
arr1:
 [1.4945 2.5245 3.5221]
arr2:
 [1.49 2.52 3.52]
arr3:
 [1. 2. 3.]

数学转换

  • 🍉 数值计算,np.abs(), np.sqrt(), np.exp(), np.log(),np.log10()。
  • 🍉 三角函数。
功能函数
角度转弧度np.deg2rad(), np.radians()
弧度转角度np.rad2deg(), np.degrees()
三角函数np.sin(), np.cos(), np.tan()
反三角函数np.arcsin(), np.arccos(), np.arctan()
四象限反正切np.arctan2(y, x)
双曲函数np.sinh(), np.cosh(), np.tanh()
反双曲函数np.arcsinh(), np.arccosh(), np.arctanh()

np.all(), np.any()

  • 🍍 np.all()判断数组中的所有元素是否都为 True(或非零值),返回一个布尔值
  • 🍍 判断数组中是否存在至少一个元素为 True(或非零值),返回一个布尔值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值