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

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.xdnf.cn/news/8967.html

相关文章:

  • 通俗理解线性与非线性、时变与时不变系统,和数值不稳定性机制
  • 内存管理 : 03多级页表和快表
  • MCP 协议结合大模型使用浅讲
  • 【解读—论文】引导性掩码表示学习以捕捉心电图的时空关系
  • 2025/5/25 学习日记 linux进阶命令学习
  • ISO 20000体系:服务请求管理、问题管理、事件管理区别与联系
  • 基于云的内容中台核心优势是什么?
  • Threejs 物体碰撞检测
  • 58.在新建对话的空白页面添加一些引导性话语
  • 《仿盒马》app开发技术分享-- 地址管理页(端云一体)
  • TSC2007触摸驱动实验(一)
  • Java 8到Java 24:核心特性介绍
  • 动态工作空间:目标数据结构为源数据
  • FreeRTOS--消息队列
  • RocketMQ核心特性与最佳实践
  • 微前端qiankun - 应用之间的通信
  • 车载软件架构 -AUTOSAR Vector SIP简介
  • 线程池配置经验总结
  • 解决Visual Studio报“IntelliSense不可用,需设置TRACEDESIGNTIME = true“问题
  • 获取点击点所在区域所能容纳最大连续空白矩形面积及顶点坐标需求分析及相关解决方案
  • 【linux】全志tina分区表挂载的脚本路径
  • 绩效管理缺乏数据支持,如何提高客观性?
  • 【AI论文】QuickVideo:通过系统算法协同设计实现实时长视频理解
  • 《数据密集型应用系统设计》笔记
  • BAT32G113 发送互补PWM
  • 【位运算】比特位计数
  • 海外仓系统 选浩方WMS一款体验更好的海外仓管理系统
  • 2025年—最新ComfyUI_修复面部与手部
  • 《爱的艺术》
  • 升级Win11后VMware虚拟机屏幕调整问题