数据分析 -- numpy
文章目录
- numpy库简介
 - 简介
 - 特点
 
- numpy操作
 - 数组创建
 - 数组属性
 - 数组变更
 - 数据计算
 
numpy库简介
简介
- 开源的Python库,它提供了高性能的多维数值(numpy.ndarray)计算能力;
 - 由“Numerical Python”缩写而来,并且它是Pandas库的基础;
 - NumPy提供了许多有用的功能,例如数组操作、矩阵运算、傅里叶变换等;
 - 支持向量化编程,这使得它比传统的循环和条件语句更加高效;
 - NumPy完全基于C语言实现,并且已经经过了充分的优化,因此它的运行速度非常快。
 
特点
- numpy中,用
轴(axis)来描述数组的维度。 - axis=0表列,意味着你将沿着列方向(跨行)对数据进行操作,即进行列数据操作;
 - 同理,axis=1表行,即进行行数据操作。
 
numpy操作
import numpy as np
 
数组创建
- 创建一维数组
 
list = [1,2,3,4,5]
array = np.array(list)
print(array)
print(type(array))>[1 2 3 4 5]
><class 'numpy.ndarray'>
 
- 创建二维数组
 
list = [[1,2],[3,4],[5,6]]
array = np.array(list)
print(array)>[[1 2][3 4][5 6]]
 
- 创建等差一维数组
 
- np.arange(开始值,结束值,步长)array = np.arange(1,10,2)
print(array)
>[1 3 5 7 9]
 
- 创建一/多维数组
 
- np.zeros(shape, dtype=float, order='C'):创建一个元素全为0的数组
- np.ones(shape, dtype=None, order='C'):创建一个元素全为1的数组
- np.empty(shape, dtype=float, order='C'):创建一个未初始化的数组,元素随机
- np.full(shape, fill_value, dtype=None, order='C'):创建一个具有给定形状和填充值的数组- shape: 数组的性转- dtype: 数组元素数据类型- order:内存布局顺序,C-按行,F-按列array = np.empty((2,4), dtype=np.int8)
print(array)
>[[ 96 -39 -22  70][ 24  86   0   0]]
 
- 创建随机数组
 
import numpy as np# 创建服从均匀分布的随机数组
rand_array = np.random.rand(2, 3)
print("均匀分布的随机数组:\n", rand_array)# 创建服从标准正态分布的随机数组
randn_array = np.random.randn(2, 3)
print("标准正态分布的随机数组:\n", randn_array)# 创建指定范围的随机整数数组
randint_array = np.random.randint(1, 10, size=(2, 3))
print("指定范围的随机整数数组:\n", randint_array)# 创建服从均匀分布的随机数组
random_array = np.random.random((2, 3))
print("均匀分布的随机数组:\n", random_array)>均匀分布的随机数组:[[0.49018606 0.05014734 0.38739906][0.09357898 0.98583039 0.6992634 ]]
>标准正态分布的随机数组:[[ 1.44017508  0.55562128 -0.11157242][ 0.80112095  1.58158805  0.81131876]]
>指定范围的随机整数数组:[[7 6 9][5 2 6]]
>均匀分布的随机数组:[[0.35562269 0.29418661 0.49925419][0.76548519 0.70753405 0.02305559]]
 
数组属性
- 数组索引
 
array = np.array([[1, 2, 3], [4, 5, 6]])
# 获取特定元素
print("第一个元素:", array[0, 0])
print("最后一个元素:", array[-1, -1])
# 获取特定行
print("第一行:", array[0, :])
print("第二列:",array[:, 1])>第一个元素: 1
>最后一个元素: 6
>第一行: [1 2 3]
>第二列: [2 5]
 
- 数组形状
 
# 创建数组
array = np.array([[1, 2, 3], [4, 5, 6]])
print(array.shape)>(2, 3)
 
- 数组维度/大小
 
array = np.array([[1, 2, 3], [4, 5, 6]])
print(array.ndim)
print(array.size)> 2
> 6
 
- 数组数据类型
 
array = np.array([[1, 2, 3], [4, 5, 6]])
print(array.dtype)> int64
 
数组变更
- 填充
 
array = np.empty((2, 3), dtype=np.int8)# 使用np.fill()方法填充数组
array.fill(8)
print("使用np.full()方法填充的数组:", array)
>使用np.full()方法填充的数组: [[8 8 8][8 8 8]]
 
- 插入删除
 
array = np.array([1, 2, 3, 4, 5])# 在指定位置插入元素
inserted_array = np.insert(array, 2, [6, 7])
print("插入元素后的数组:", inserted_array)
>插入元素后的数组: [1 2 6 7 3 4 5]# 在末尾追加元素
appended_array = np.append(array, [6, 7])
print("追加元素后的数组:", appended_array)
>追加元素后的数组: [1 2 3 4 5 6 7]# 删除指定位置的元素
deleted_array = np.delete(array, 2)
print("删除元素后的数组:", deleted_array)
>删除元素后的数组: [1 2 4 5]
 
- 数组切片
 
array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
sub_array = array[0:2, 1:3]
print(sub_array)>[[2 3][5 6]]
 
- 数组转置
 
my_array = np.array([[1, 2, 3], [4, 5, 6]])
transposed_array = np.transpose(my_array)
print(transposed_array)>[[1 4][2 5][3 6]]
 
- 改变形状
 
# 创建数组
array = np.array([[1, 2, 3], [4, 5, 6]])
array = np.reshape(array, (3, 2))
print(array)>[[1 2][3 4][5 6]]
 
- 改变数据类型
 
array = np.array([[1, 2, 3], [4, 5, 6]])
array = array.astype(float)
print(array.dtype)>float64
 
- 数组连接
 
# 创建数组
array1 = np.array([[1, 2], [3, 4]])
array2 = np.array([[5, 6], [7, 8]])# 沿水平方向连接数组
hstacked_array = np.hstack((array1, array2))
print("水平连接的数组:\n", hstacked_array)# 沿垂直方向连接数组
vstacked_array = np.vstack((array1, array2))
print("垂直连接的数组:\n", vstacked_array)>水平连接的数组:[[1 2 5 6][3 4 7 8]]
>垂直连接的数组:[[1 2][3 4][5 6][7 8]]
 
- 数组拆分
 
- numpy.split(array, indices_or_sections, axis=0): 沿指定轴拆分数组
- numpy.hsplit(array, indices_or_sections): 水平拆分数组(列)
- numpy.vsplit(array, indices_or_sections): 垂直拆分数组(行)array = np.array([[1, 2, 3, 11, 12, 13], [4, 5, 6, 14,15,16], [7, 8, 9, 17,18,19]])# 使用numpy.split()沿第1轴(行)拆分数组
split_array1 = np.split(array, 3, axis=0)
for arr in split_array1:print(arr)>[[ 1  2  3 11 12 13]][[ 4  5  6 14 15 16]][[ 7  8  9 17 18 19]]# 使用numpy.hsplit()水平拆分数组
split_array2 = np.hsplit(array, 3)
for arr in split_array2:print(arr)>[[1 2][4 5][7 8]][[ 3 11][ 6 14][ 9 17]][[12 13][15 16][18 19]]# 使用numpy.vsplit()垂直拆分数组
split_array3 = np.vsplit(array, 3)
for arr in split_array3:print(arr)>[[ 1  2  3 11 12 13]][[ 4  5  6 14 15 16]][[ 7  8  9 17 18 19]]
 
- 数组排序
 
array = np.array([3, 1, 2, 5, 4])# 对数组进行排序
sorted_array = np.sort(array)
print("排序后的数组:", sorted_array)sorted_indices = np.argsort(array)
print("排序后的原索引:", sorted_indices)>排序后的数组: [1 2 3 4 5]
>排序后的索引: [1 2 0 4 3]
 
- 复制
 
array = np.array([1, 2, 3])# 使用np.copy()函数复制数组
copied_array = array.copy()
print("复制的数组:", copied_array)
>复制的数组: [1 2 3]
 
- 重复
 
array = np.array([1, 2, 3])# 数组元素重复
repeated_array = np.repeat(array, 2)
print("重复后的数组:", repeated_array)# 数组重复
tiled_array = np.tile(array, 2)
print("重复后的数组:", tiled_array)>重复后的数组: [1 1 2 2 3 3]
>重复后的数组: [1 2 3 1 2 3]
 
- 去重
 
array = np.array([1, 2, 2, 3, 3, 4, 5, 5])# 对数组进行去重
unique_array = np.unique(array)
print("去重后的数组:", unique_array)
>去重后的数组: [1 2 3 4 5]
 
数据计算
- 最大值/最小值
 
array = np.array([3, 1, 2, 5, 4])# 获取数组的最大值和最小值
max_value = np.max(array)
min_value = np.min(array)
# 获取数组的最大值和最小值的索引
max_index = np.argmax(array)
min_index = np.argmin(array)
print("数组的最大值:", max_value, "索引:", max_index)
print("数组的最小值:", min_value, "索引:", min_index)
>数组的最大值: 5 索引: 3
>数组的最小值: 1 索引: 1
 
- 求和
 
array = np.array([[1, 2, 3], [4, 5, 6]])# 计算数组的行和
row_sum = np.sum(array, axis=1)
print("数组的行和:", row_sum)# 计算数组的列和
col_sum = np.sum(array, axis=0)
print("数组的列和:", col_sum)# 计算数组元素的累积和
cumsum_array = np.cumsum(array)
print("数组元素的累积和:", cumsum_array)# 计算数组行元素的累积和
cumsum_array = np.cumsum(array, axis=1)
print("数组行元素的累积和:", cumsum_array)>数组的行和: [ 6 15]
>数组的列和: [5 7 9]
>数组元素的累积和: [ 1  3  6 10 15 21]
>数组行元素的累积和: [[ 1  3  6][ 4  9 15]]
 
- 求积
 
array = np.array([[1, 2, 3], [4, 5, 6]])# 数组求积
prod_result = np.prod(array)
print("数组元素求积:", prod_result)
>数组元素求积: 720
 
- 求余
 
my_array = np.array([1, 2, 3, 4, 5])# 对数组元素进行取余操作
mod_result = np.mod(my_array, 2)
print("数组元素取余操作:", mod_result)
>数组元素取余操作: [1 0 1 0 1]
 
- 平均值
 
array = np.array([3, 1, 2, 5, 4])mean_value = np.mean(array)
print("数组元素的平均值:", mean_value)
>数组元素的平均值: 3.0
 
- 其他计算
 
# 标准差
np.std()
# 方差
np.var()
# 绝对值
np.abs()
# 四舍五入
np.round()
# 向下取整
np.floor()
# 向上取整
np.ceil()
# 截断
np.trunc() 
# 指数
np.power()
# 兑数
np.log()
 
- 应用自定义函数
 
array = np.array([[1, 2, 3], [4, 5, 6]])# 自定义函数
def custom_function(x):return x * 2# 对数组指定轴应用自定义函数
new_array = np.apply_along_axis(custom_function, axis=1, arr=array)
print("应用自定义函数后的数组:\n", new_array)
>应用自定义函数后的数组:[[ 2  4  6][ 8 10 12]]
 
- 数组间计算
 
array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])# 数组元素加法
add_result = np.add(array1, array2)
# add_arr = array1 + array2
print("数组元素加法:", add_result)# 数组元素减法
subtract_result = np.subtract(array1, array2)
# sub_arr = array1 - array2
print("数组元素减法:", subtract_result)# 数组元素乘法
multiply_result = np.multiply(array1, array2)
# mul_arr = array1 * array2
print("数组元素乘法:", multiply_result)# 数组元素除法
divide_result = np.divide(array1, array2)
# div_arr = array1/array2
print("数组元素除法:", divide_result)
>数组元素加法: [3 4 6]
>数组元素减法: [-1  0  0]
>数组元素乘法: [2 4 9]
>数组元素除法: [0.5 1.  1. ]
 
- 数组间比较
 
array1 = np.array([1, 2, 3])
array2 = np.array([2, 2, 3])# 相等
equal_result = np.equal(array1, array2)
print("数组元素相等比较:", equal_result)
>数组元素相等比较: [False  True  True]np.not_equal(array1, array2) # 不等于
np.greater(array1, array2)   # 大于
np.less(array1, array2)      # 小于
np.greater_equal(array1, array2)   # 大于等于
np.less_equal(array1, array2)  # 小于等于
相关文章:
数据分析 -- numpy
文章目录 numpy库简介简介特点 numpy操作数组创建数组属性数组变更数据计算 numpy库简介 简介 开源的Python库,它提供了高性能的多维数值(numpy.ndarray)计算能力;由“Numerical Python”缩写而来,并且它是Pandas库的…...
开源项目生存现况:xz投毒事件引发的思考与GNU tar维护挑战
(首发地址:学习日记 https://www.learndiary.com/2024/04/xz-tar/) 嗨,大家好!我是来自淘宝网“学习日记小店”的 learndiary,专注于 Linux 服务领域。今天我要和大家谈谈近期备受瞩目的 XZ 供应链投毒事件…...
前端开发语言有哪些
随着互联网的迅猛发展,前端开发已经成为了一个炙手可热的职业。对于初学者来说,了解前端开发所使用的语言是非常重要的。那么,前端开发语言有哪些呢?本文将为您一一介绍。 一、HTML HTML(HyperText Markup Language&…...
速盾:cdn加速https额外收费吗?
CDN(内容分发网络)是一种通过在全球各地部署服务器来提供高速互联网内容传输的技术,它可以加速网站的访问速度,提高用户体验。而HTTPS(超文本传输安全协议)是一种通过加密技术保护网站数据传输安全的协议。…...
【蓝桥杯嵌入式】13届程序题刷题记录及反思
一、题目分析 考察内容: led按键(短按)PWM输出(PA1)串口接收lcd显示 根据PWM输出占空比调节,高频与低频切换 串口接收(指令解析)【中断接收】 2个显示界面 led灯闪烁定时器 二…...
C++类 单例模式
例子 请看如下的类和调用: 在您提供的代码片段中,CPathPlanMan 类使用了一个单例模式,这意味着这个类只需要一个实例,并且提供了全局访问点来获取这个实例。这通常用于控制对一个类实例的访问,尤其是在创建实例代价昂…...
prompt 工程案例
目录 prompt 工程是什么? 案例 vllm 推理加速框架 prompt 工程是什么? prompt:提示词,也就是我们使用网页版输入给大模型的内容就叫 prompt,那什么是 prompt 工程呢? 简单理解其实就是利用编写的 prom…...
燃气管网安全运行监测系统功能介绍
燃气管网,作为城市基础设施的重要组成部分,其安全运行直接关系到居民的生命财产安全和城市的稳定发展。然而,随着城市规模的不断扩大和燃气使用量的增加,燃气管网的安全运行面临着越来越大的挑战。为了应对这些挑战,燃…...
正则表达式(2)
文章目录 专栏导读1、贪婪与非贪婪2、转义匹配 专栏导读 ✍ 作者简介:i阿极,CSDN 数据分析领域优质创作者,专注于分享python数据分析领域知识。 ✍ 本文录入于《python网络爬虫实战教学》,本专栏针对大学生、初级数据分析工程师精…...
xv6源码分析 001
xv6源码分析 001 我们先看看xv6这个项目的基本结构(只看代码部分) 主要就是两个目录kernel 和 user。 user是一些用户程序,也就是我们平时在shell上面执行的命令,每执行一个命令就会创建一个新的用户进程来执行这个命令 在user目…...
JS代码小知识(个人向)
JS 对象转数组 let obj {0:"a",1:"b",length:2 //加上这个就能转了 }; console.log(Array.from(obj)); // ["a", "b"] 数组的拼接 let a ["a","b"] let b ["c","d"] let c [...a , …...
MC34119
这份文件是关于MC34119线性集成电路的产品规格说明书,由Unisonic Technologies Co., Ltd生产。MC34119是一款低功耗音频放大器IC,主要用于电话应用,如扬声器电话。以下是该文件的核心内容概要: 产品描述: MC34119是一款…...
RabbitMQ3.13.x之十_流过滤的内部结构设计与实现
RabbitMQ3.13.x之十_流过滤的内部结构设计与实现 文章目录 RabbitMQ3.13.x之十_流过滤的内部结构设计与实现1. 概念1. 消息发布2. 消息消费 2. 流的结构1. 在代理端进行过滤2. 客户端筛选3. JavaAPI示例4. 流过滤配置5. AMQP上的流过滤6. 总结 3. 相关链接 1. 概念 流过滤的思…...
Node爬虫:原理简介
在数字化时代,网络爬虫作为一种自动化收集和分析网络数据的技术,得到了广泛的应用。Node.js,以其异步I/O模型和事件驱动的特性,成为实现高效爬虫的理想选择。然而,爬虫在收集数据时,往往面临着诸如反爬虫机…...
Python如何解决“滑动拼图”验证码(8)
前言 本文是该专栏的第67篇,后面会持续分享python爬虫干货知识,记得关注。 做过爬虫项目的同学,或多或少都会接触到一些需要解决验证码才能正常获取数据的平台。 在本专栏之前的文章中,笔者有详细介绍通过python来解决多种“验证码”(点选验证,图文验证,滑块验证,滑块…...
MongoDB 启动异常
Failed to start up WiredTiger under any compatibility version. 解决方案: 删除WiredTiger.lock 和 mongod.lock两个文件,在重新启动。回重新生成新的文件。...
mysql 常见数据处理 dml
学习完,mysql正则表达式查询,把常见的数据处理,做一个汇总,便于查看。 数据操纵语言(Data Manipulation Language, DML)。 1,新增数据: 1,单个插入: insert…...
课时86:流程控制_函数基础_函数退出
2.1.2 函数退出 这一节,我们从 基础知识、简单实践、小结 三个方面来学习。 基础知识 简介 我们可以将函数代码块,看成shell脚本内部的小型脚本,所以说函数代码块也会有执行状态返回值。对于函数来说,它通常支持两种种状态返回…...
【Python】无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称解决方案
【Python】无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称解决方案 大家好 我是寸铁👊 总结了一篇【Python】无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称解决方案✨ 喜欢的小伙伴可以点点关注 💝 前言 今天寸铁…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
