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

news2025/5/26 7:09:52

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 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(或非零值),返回一个布尔值
code:
import numpy as np

arr1 = 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.coloradmin.cn/o/2385917.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WebSocket(看这一篇就够了)

文章目录 WebSocket 基本概念什么是WebSocket?为什么需要 WebSocket?与 HTTP 协议的区别WebSocket协议的原理WebSocket工作流程WebSocket 数据帧结构和控制帧结构。JavaScript 中 WebSocket 对象的属性和方法,以及如何创建和连接 WebSocket。webSocket简…

旧物回收小程序:让闲置焕发光彩,为生活增添价值

你是否常常为家中堆积如山的闲置物品而烦恼?那些曾经心爱的物品,如今却成了占据空间的“鸡肋”,丢弃可惜,留着又无处安放。别担心,一款旧物二手回收小程序将为你解决这一难题,让闲置物品重新焕发光彩&#…

数学建模MathAI智能体-2025电工杯A题实战

题目: 光伏电站发电功率日前预测问题 光伏发电是通过半导体材料的光电效应,将太阳能直接转化为电能的技术。光伏电站是由众多光伏发电单元组成的规模化发电设施。 光伏电站的发电功率主要由光伏板表面接收到的太阳辐射总量决定,不同季节太阳…

C# Windows Forms应用程序-002

目录 项目结构 主类和命名空间 构造函数和析构函数 初始化组件 (InitializeComponent) 按钮点击事件处理程序 主程序入口点 项目截图: 完整代码: 项目结构 这个项目是一个简单的C# Windows Forms应用程序,获取指定文件的根信息…

理解计算机系统_线程(八):并行

前言 以<深入理解计算机系统>(以下称“本书”)内容为基础&#xff0c;对程序的整个过程进行梳理。本书内容对整个计算机系统做了系统性导引,每部分内容都是单独的一门课.学习深度根据自己需要来定 引入 接续理解计算机系统_并发编程(10)_线程(七):基于预线程化的…

【MySQL】09.索引

索引是用来提高数据库的性能的&#xff0c;但查询速度的提高是以插入、更新、删除的速度为代价的&#xff0c;这些写操作&#xff0c;增加了大量的IO。所以它的价值在于提高一个海量数据的检索速度。 1. 认识磁盘 MySQL 给用户提供存储服务&#xff0c;而存储的都是数据&…

【备忘】 windows 11安装 AdGuardHome,实现开机自启,使用 DoH

windows 11安装 AdGuardHome&#xff0c;实现开机自启&#xff0c;使用 DoH 下载 AdGuardHome解压 AdGuardHome启动 AdGuard Home设置 AdGuardHome设置开机自启安装 NSSM设置开机自启重启电脑后我们可以访问 **http://127.0.0.1/** 设置使用 AdGuardHome DNS 效果图 下载 AdGua…

[Windows] 游戏常用运行库- Game Runtime Libraries Package(6.2.25.0409)

游戏常用运行库 合集 整合了许多游戏会用到的运行库&#xff0c;支持 Windows XP – Windows 11 系统&#xff0c;并且支持自动检测系统勾选推荐的运行库&#xff0c;方便快捷。 本版特点&#xff1a; By&#xff1a;mefcl 整合常见最新游戏所需运行库 根据系统自动勾选推荐…

(九)PMSM驱动控制学习---高阶滑膜观测器

在之前的文章中&#xff0c;我们介绍了永磁同步电机无感控制中的滑模观测器&#xff0c;但是同时我们也认识到了他的缺点&#xff1a;因符号函数带来的高频切换分量&#xff0c;使用低通滤波器引发相位延迟&#xff1b;在本篇文章&#xff0c;我们将会介绍高阶滑模观测器的无感…

25年上半年五月之软考之设计模式

目录 一、单例模式 二、工厂模式 三、 抽象工厂模式 四、适配器模式 五、策略模式 六、装饰器模式 ​编辑 考点&#xff1a;会挖空super(coffeOpertion); 七、代理模式 为什么必须要使用代理对象&#xff1f; 和装饰器模式的区别 八、备忘录模式 一、单例模式 这个…

Mongo DB | 多种修改数据库名称的方式

目录 方法一&#xff1a;使用 mongodump 和 mongorestore 命令 方法二&#xff1a;使用 db.copyDatabase() 方法 方法三&#xff1a;使用 MongoDB Compass 在 MongoDB 中&#xff0c;更改数据库名称并不是一个直接的操作&#xff0c;因为 MongoDB 不提供直接重命名数据库的命…

QListWidget的函数,信号介绍

前言 Qt版本:6.8.0 该类用于列表模型/视图 QListWidgetItem函数介绍 作用 QListWidget是Qt框架中用于管理可交互列表项的核心组件&#xff0c;主要作用包括&#xff1a; 列表项管理 支持动态添加/删除项&#xff1a;addItem(), takeItem()批量操作&#xff1a;addItems()…

EtherNet/IP机柜内解决方案在医疗控制中心智能化的应用潜能和方向分析

引言 在数智化转型浪潮席卷各行各业的今天,医疗领域同样面临着提升运营效率、改善患者体验和加强系统可靠性的多重挑战。Rockwell Automation于2025年5月20日推出的EtherNet/IP机柜内解决方案,为医疗中心的自动化升级提供了一种创新路径。本报告将深入分析这一解决方案的核心…

【结构设计】以3D打印举例——持续更新

【结构设计】以立创EDA举例——持续更新 文章目录 [TOC](文章目录) 前言立创EDA官网教程一、3D外壳绘制二、3D外壳渲染三、3D外壳打印1.3D打印机——FDM2.3D打印机——光固化 四、3D外壳LOG设计1.激光雕刻机 总结 前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面…

MySQL中的重要常见知识点(入门到入土!)

基础篇 基础语法 添加数据 -- 完整语法 INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);-- 示例 insert into employee(id,workno,name,gender,age,idcard,entrydate) values(1,1,Itcast,男,10,123456789012345678,2000-01-01) 修改数据 -- 完整语法 UPDA…

理解全景图像拼接

1 3D到2D透视投影 三维空间上点 p 投影到二维空间 q 有两种方式&#xff1a;1&#xff09;正交投影&#xff0c;2&#xff09;透视投影。 正交投影直接舍去 z 轴信息&#xff0c;该模型仅在远心镜头上是合理的&#xff0c;或者对于物体深度远小于其到摄像机距离时的近似模型。…

云原生安全基石:Linux进程隔离技术详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 进程隔离是操作系统通过内核机制将不同进程的运行环境和资源访问范围隔离开的技术。其核心目标在于&#xff1a; 资源独占&#xff1a;确保…

基于PySide6与pycatia的CATIA几何阵列生成器开发实践

引言:参数化设计的工业价值 在航空航天、汽车制造等领域,复杂几何图案的批量生成是模具设计与机械加工的核心需求。传统手动建模方式存在效率低下、参数调整困难等问题。本文基于PySide6+pycatia技术栈,实现了一套支持​​动态参数配置​​、​​智能几何阵列生成​​的自动…

Linux学习心得问题总结(三)

day09 文件权限篇 文件权限的属性有哪些&#xff1f;我们应如何理解这些属性&#xff1f; 文件权限的属性包括可读&#xff08;r&#xff09;、可写&#xff08;w&#xff09;、可执行&#xff08;x&#xff09;三种权限&#xff0c;根据文件类型可分为普通文件&#xff08;.…

Anthropic推出Claude Code SDK,强化AI助理与自动化开发整合

Anthropic发布Claude Code SDK&#xff0c;协助开发团队将人工智慧助理整合进自动化开发流程&#xff0c;支援多轮对话、MCP协定及多元格式。 Anthropic推出Claude Code SDK&#xff0c;提供开发者与企业一套可程序化整合Claude AI助理至开发流程的工具。此SDK以命令列介面为基…