当前位置: 首页 > article >正文

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

numpy中常用的统计函数

  • numpy中常用统计函数
    • numpy普通统计函数
    • 忽略 NaN 值进行统计
    • 百分位数
  • numpy中形状转换函数
    • 重塑数组(reshape)
    • 展平数组(flatten/ravel)
    • 转置(transpose/T)
  • 数据类型的转换
    • 使用astype()转换类型
  • 元素值转换
  • 数学转换
  • np.all(), np.any()

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 nparr = 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.6result:
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 nparr = 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 nparr1 = 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 nparr1 = 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 nparr1 = 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 nparr1 = np.array([list(range(1, 4)), list(range(11, 44, 11))])
arr2 = arr1.transpose()
arr2[1,1] = 666print("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 nparr1 = 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 nparr1 = 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 nparr1 = 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(或非零值),返回一个布尔值
code:
import numpy as nparr1 = np.array([1, 2, 3])
print("np.all(arr1>0):\n", np.all(arr1>0))
print("np.all(arr1>2):\n", np.all(arr1>2))# arr2从上到下, arr2[0, 0] | arr2[1, 0] True, arr2[0, 1] | arr2[1, 1] True, 返回[True, True]
arr2 = np.array([[True, True], [False, False]])
# axis=0, arr2从上到下, arr2[0, 0] | arr2[1, 0] True, arr2[0, 1] | arr2[1, 1] True, 返回[True, True]
print(np.any(arr2, axis=0))  # 从上到下的方向
# axis=1, arr2从左到右, arr2[0, 0] | arr2[0, 1] True, arr2[1, 0] | arr2[1, 1] False, 返回[True, False]
print(np.any(arr2, axis=1))  # 从左到右的方向result:
np.all(arr1>0):True
np.all(arr1>2):False
[ True  True]
[ True False]
http://www.lryc.cn/news/2385917.html

相关文章:

  • 【C语言干货】free细节
  • 网络安全-等级保护(等保) 2-0 等级保护制度现行技术标准
  • WebSocket(看这一篇就够了)
  • 旧物回收小程序:让闲置焕发光彩,为生活增添价值
  • 精益数据分析(73/126):黏性阶段的功能优先级法则——七问决策模型与风险控制
  • React声明式编程(手动控制,大型项目,深度定制)与Vue响应式系统(自动优化,中小型项目,快速开发)区别
  • 数学建模MathAI智能体-2025电工杯A题实战
  • 跨平台游戏引擎 Axmol-2.6.0 发布
  • C# Windows Forms应用程序-002
  • 理解计算机系统_线程(八):并行
  • 【MySQL】09.索引
  • 【备忘】 windows 11安装 AdGuardHome,实现开机自启,使用 DoH
  • [Windows] 游戏常用运行库- Game Runtime Libraries Package(6.2.25.0409)
  • MYSQL order 、group 与row_number详解
  • QT之巧用对象充当信号接收者
  • 《红警2000》游戏信息
  • Vue3 + ThinkPHP8 + PHP8.x 生态与 Swoole 增强方案对比分析
  • (九)PMSM驱动控制学习---高阶滑膜观测器
  • 25年上半年五月之软考之设计模式
  • Mongo DB | 多种修改数据库名称的方式
  • QListWidget的函数,信号介绍
  • Python类属性与实例属性的覆盖机制:从Vector2d案例看灵活设计
  • QML与C++交互2
  • EtherNet/IP机柜内解决方案在医疗控制中心智能化的应用潜能和方向分析
  • springboot中各模块间实现bean之间互相调用(service以及自定义的bean)
  • RabbitMQ 可靠性保障:消息确认与持久化机制(二)
  • QML学习07Property
  • Skywalking安装部署使用教程
  • 网络编程与axios技术
  • 【结构设计】以3D打印举例——持续更新