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

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.10 文本数据炼金术:从CSV到结构化数组

在这里插入图片描述

1.10 《文本数据炼金术:从CSV到结构化数组》

目录
1.10 文本数据炼金术:从CSV到结构化数组
1.10.1 引言
1.10.2 结构化数据类型定义详解
1.10.3 处理缺失值的5种策略
1.10.4 大文件分块读取优化
1.10.5 时区转换等高级处理
1.10.6 结构化数组与Pandas的互操作对比
1.10.7 总结

1.10.1 引言

在数据科学和机器学习领域,处理文本数据是一项常见的任务。CSV(Comma-Separated Values)文件是一种常用的文本数据格式,它们以逗号分隔的值来存储数据。将CSV文件转换为NumPy的结构化数组可以显著提高数据处理的效率和灵活性。本文将详细探讨如何从CSV文件中读取数据并将其转换为NumPy的结构化数组,同时介绍处理缺失值、大文件分块读取优化、时区转换等高级处理技巧,并与Pandas进行互操作对比。

文本数据处理流程
数据加载
类型转换
缺失值处理
数据优化
高级转换
分块读取
结构化类型定义
填充策略
内存映射
时区转换

1.10.2 结构化数据类型定义详解

1.10.2.1 什么是结构化数组?

结构化数组(Structured Array)是NumPy中的一种高级数据类型,它允许每个字段有不同的数据类型。与普通的NumPy数组相比,结构化数组具有更强的描述性和灵活性,适用于处理复杂的数据结构。

1.10.2.2 创建结构化数组

可以使用numpy.dtype对象来定义结构化数据类型。以下是一个简单的例子:

import numpy as np# 定义结构化数据类型
dtype = np.dtype([('name', 'U20'),  # 姓名,使用Unicode字符串,最多20个字符('age', 'i4'),    # 年龄,使用32位整数('gender', 'U10'), # 性别,使用Unicode字符串,最多10个字符('height', 'f8')  # 身高,使用64位浮点数
])# 创建结构化数组
data = np.array([('Alice', 25, 'Female', 165.5),('Bob', 30, 'Male', 175.0),('Charlie', 35, 'Male', 180.0)
], dtype=dtype)print(data)

1.10.2.3 数据类型映射表(Python↔NumPy)

Python Data TypeNumPy Data Type
int‘i4’
float‘f8’
str‘U20’ or ‘S20’
bool‘b1’
datetime‘datetime64’
None‘O’ (object)

1.10.2.4 结构化数组的操作

结构化数组支持各种NumPy的操作,如索引、切片、排序等。以下是一些示例:

# 索引
print(data['name'])  # 输出所有姓名# 切片
print(data[1:3])  # 输出第2和第3个记录# 排序
sorted_data = np.sort(data, order='age')  # 按年龄排序
print(sorted_data)

1.10.2.5 多字段排序

多字段排序允许我们根据多个字段对结构化数组进行排序。例如,我们可以先按年龄排序,再按身高排序:

sorted_data = np.sort(data, order=['age', 'height'])
print(sorted_data)

1.10.2.6 内存效率

结构化数组在内存使用上比普通数组更高效,因为它可以精确地存储每个字段的数据类型和大小。这对于处理大规模数据集非常有帮助。

1.10.3 处理缺失值的5种策略

1.10.3.1 填充默认值

对于缺失值,最简单的处理方式是填充默认值。例如,对于整数字段,可以填充0;对于浮点数字段,可以填充np.nan

data = np.array([('Alice', 25, 'Female', 165.5),('Bob', 30, 'Male', np.nan),  # 缺失值('Charlie', 35, 'Male', 180.0)
], dtype=dtype)# 填充默认值
data['height'] = np.nan_to_num(data['height'], nan=0.0)  # 将nan填充为0.0
print(data)

1.10.3.2 插值

插值是一种常用的数据填充方法。NumPy提供了多种插值方法,如线性插值和最近邻插值。

import pandas as pddf = pd.DataFrame(data)
df['height'] = df['height'].interpolate()  # 线性插值
data = df.to_records(index=False)  # 转换回NumPy结构化数组
print(data)

1.10.3.3 删除缺失值的记录

如果缺失值不影响整体数据,可以考虑删除这些记录。

data = data[~np.isnan(data['height'])]  # 删除height字段为nan的记录
print(data)

1.10.3.4 使用掩码数组

NumPy的掩码数组(Masked Array)可以方便地处理缺失值。

masked_data = np.ma.masked_invalid(data['height'])  # 创建掩码数组
print(masked_data)

1.10.3.5 使用特殊标记

在某些情况下,可以使用特殊标记来表示缺失值,例如-1或-999。

data['height'] = np.where(np.isnan(data['height']), -999, data['height'])  # 将nan填充为-999
print(data)

1.10.4 大文件分块读取优化

1.10.4.1 问题背景

处理大规模的CSV文件时,一次性加载所有数据到内存中可能会导致内存溢出。因此,需要使用分块读取的方法来优化性能。

1.10.4.2 使用numpy.loadtxt分块读取

numpy.loadtxt可以通过设置skiprowsmax_rows参数来实现分块读取。

import numpy as npdef read_chunk(file, dtype, skiprows, max_rows):return np.loadtxt(file, dtype=dtype, delimiter=',', skiprows=skiprows, max_rows=max_rows)# 定义结构化数据类型
dtype = np.dtype([('name', 'U20'),('age', 'i4'),('gender', 'U10'),('height', 'f8')
])# 读取大文件
chunk_size = 1000
with open('large_file.csv', 'r') as file:for i in range(0, 10000, chunk_size):chunk = read_chunk(file, dtype, i, chunk_size)print(f"读取了第{i + 1}到第{i + chunk_size}行数据")print(chunk)

1.10.4.3 使用生成器实现流式处理

生成器是一种更高效的方法,可以在读取数据时进行处理,而无需将所有数据加载到内存中。

def read_csv_in_chunks(file, dtype, chunk_size=1000):with open(file, 'r') as f:while True:chunk = np.loadtxt(f, dtype=dtype, delimiter=',', max_rows=chunk_size)if len(chunk) == 0:breakyield chunk# 读取大文件
dtype = np.dtype([('name', 'U20'),('age', 'i4'),('gender', 'U10'),('height', 'f8')
])for i, chunk in enumerate(read_csv_in_chunks('large_file.csv', dtype)):print(f"读取了第{i * chunk_size + 1}到第{(i + 1) * chunk_size}行数据")print(chunk)

1.10.4.4 Dask库的使用

Dask是一个用于并行计算的库,可以轻松处理大规模的数据集。

import dask.array as da# 读取大文件
dask_data = da.from_csv('large_file.csv', dtype=dtype, blocksize=1000 * 1024)  # 每块1MB
print(dask_data)

1.10.5 时区转换等高级处理

1.10.5.1 时区转换的重要性

在处理时间数据时,时区转换是一个关键步骤。不同的时区会导致时间戳的不一致,影响数据分析的准确性。

1.10.5.2 时区转换的实现

NumPy的时间戳类型datetime64支持时区转换。以下是一个简单的示例:

import numpy as np
import pytz
from datetime import datetime# 生成带时区的日期时间
dt = np.datetime64('2023-01-01T00:00:00', 'ns').astype(datetime).replace(tzinfo=pytz.utc)
print(dt)# 转换时区
dt = dt.astimezone(pytz.timezone('Asia/Shanghai'))
print(dt)

1.10.5.3 带时区的时间戳转换实战

实际应用中,我们可能需要处理包含时间戳的CSV文件,并进行时区转换。

import numpy as np
import pytz
from datetime import datetime# 定义结构化数据类型
dtype = np.dtype([('name', 'U20'),('age', 'i4'),('gender', 'U10'),('timestamp', 'datetime64[ns]')  # 时间戳字段
])# 读取数据
data = np.loadtxt('large_file.csv', dtype=dtype, delimiter=',')# 转换时区
def convert_timezone(timestamp, from_tz, to_tz):dt = timestamp.astype(datetime).replace(tzinfo=from_tz)return dt.astimezone(to_tz).timestamp()from_tz = pytz.utc
to_tz = pytz.timezone('Asia/Shanghai')data['timestamp'] = np.vectorize(convert_timezone)(data['timestamp'], from_tz, to_tz)
print(data)

1.10.5.4 时区转换的性能优化

时区转换是一个计算密集型操作,可以使用NumPy的矢量化函数来提高性能。

# 矢量化时区转换函数
convert_timezone_vec = np.vectorize(convert_timezone, otypes=[np.float64])data['timestamp'] = convert_timezone_vec(data['timestamp'], from_tz, to_tz)
print(data)

1.10.6 结构化数组与Pandas的互操作对比

1.10.6.1 Pandas的优势

Pandas是Python中处理数据的最常用库之一,它提供了丰富的数据处理功能和高效率的性能。

1.10.6.2 从Pandas DataFrames到NumPy结构化数组

Pandas DataFrames可以轻松地转换为NumPy的结构化数组。

import pandas as pd
import numpy as np# 读取CSV文件
df = pd.read_csv('large_file.csv')# 转换为NumPy结构化数组
dtype = np.dtype([('name', 'U20'),('age', 'i4'),('gender', 'U10'),('height', 'f8')
])data = df.to_records(index=False, convert_datetime64=True, dtype=dtype)
print(data)

1.10.6.3 从NumPy结构化数组到Pandas DataFrames

同样,NumPy的结构化数组也可以轻松地转换为Pandas DataFrames。

# 转换为Pandas DataFrames
df = pd.DataFrame(data)
print(df)

1.10.6.4 性能对比

在处理大规模数据时,NumPy通常比Pandas更高效。以下是一个简单的性能对比示例:

import time# 生成大规模数据
large_data = np.array([(f'User{i}', np.random.randint(18, 80), np.random.choice(['Male', 'Female']), np.random.rand())for i in range(1000000)
], dtype=dtype)# 使用NumPy处理
start_time = time.time()
numPy_data = np.sort(large_data, order='age')
end_time = time.time()
print(f"NumPy处理时间: {end_time - start_time:.2f}秒")# 使用Pandas处理
df = pd.DataFrame(large_data)
start_time = time.time()
pandas_data = df.sort_values(by='age')
end_time = time.time()
print(f"Pandas处理时间: {end_time - start_time:.2f}秒")

1.10.7 总结

本文详细介绍了如何从CSV文件中读取数据并将其转换为NumPy的结构化数组。我们讨论了结构化数据类型的定义、缺失值的处理、大文件的分块读取优化、时区转换等高级处理技巧,并与Pandas进行了互操作对比。

参考文献

参考资料名称链接
NumPy官方文档https://numpy.org/doc/stable/
Pandas官方文档https://pandas.pydata.org/docs/
Dask官方文档https://docs.dask.org/en/latest/
Python官方文档https://docs.python.org/3/
《NumPy用户指南》https://numpy.org/doc/stable/user/index.html
《Pandas用户指南》https://pandas.pydata.org/pandas-docs/stable/user_guide/index.html
《Dask用户指南》https://docs.dask.org/en/latest/user.html
《Python数据科学手册》https://jakevdp.github.io/PythonDataScienceHandbook/
《NumPy教程》https://towardsdatascience.com/numpy-tutorial-e0ebc6d53b6f
《Pandas教程》https://towardsdatascience.com/pandas-tutorial-906df96a3e50
《Dask教程》https://towardsdatascience.com/dask-tutorial-20e2ff974da1
《NumPy性能优化》https://realpython.com/faster-numpy-arrays-cython/
《Pandas性能优化》https://towardsdatascience.com/10-tips-for-faster-pandas-1e52b1d465bb
《Dask性能优化》https://medium.com/condition-red/dask-performance-tips-6d6ce01646c2
《NumPy结构化数组详解》https://numpy.org/doc/stable/user/basics.rec.html
《Pandas处理缺失值》https://pandas.pydata.org/pandas-docs/stable/user_guide/missing_data.html
《Dask读取大文件》https://docs.dask.org/en/latest/array-creation.html
《NumPy时区转换》https://numpy.org/doc/stable/reference/arrays.datetime.html
《Pandas时区转换》https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html
《Dask流式处理》https://docs.dask.org/en/latest/delayed.html
《Python生成器详解》https://realpython.com/introduction-to-python-generators/
《NumPy和Pandas互操作》https://numpy.org/doc/stable/user/basics.interface.html
《NumPy和Pandas性能对比》https://towardsdatascience.com/performance-comparison-of-numpy-vs-pandas-vs-python-list-2c96d35c8b00
《NumPy和Pandas在数据科学中的应用》https://medium.com/@a/data-science-with-numpy-and-pandas-8d2b4c0a4e58
《NumPy和Pandas的最佳实践》https://towardsdatascience.com/numpy-and-pandas-best-practices-b0e0dee09e73
《NumPy和Pandas处理大文件的技巧》https://towardsdatascience.com/working-with-large-data-in-python-and-pandas-9c0ea4d44feb

这篇文章包含了详细的原理介绍、代码示例、源码注释以及案例等。希望这对您有帮助。如果有任何问题请随私信或评论告诉我。

相关文章:

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.10 文本数据炼金术:从CSV到结构化数组

1.10 《文本数据炼金术:从CSV到结构化数组》 目录 #mermaid-svg-TNkACjzvaSXnULaB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-TNkACjzvaSXnULaB .error-icon{fill:#552222;}#mermaid-svg-TNkACjzva…...

「蓝桥杯题解」蜗牛(Java)

题目链接 这道题我感觉状态定义不太好想,需要一定的经验 import java.util.*; /*** 蜗牛* 状态定义:* dp[i][0]:到达(x[i],0)最小时间* dp[i][1]:到达 xi 上方的传送门最小时间*/public class Main {static Scanner in new Scanner(System.in);static f…...

基于springboot+vue的流浪动物救助系统的设计与实现

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…...

51单片机开发:IO扩展(串转并)实验

实验目标:通过扩展口从下至上依次点亮点阵屏的行。 下图左边是74HC595 模块电路图,右边是点阵屏电图图。 SRCLK上升沿时,将SER输入的数据移送至内部的移位寄存器。 RCLK上升沿时,将数据从移位寄存器移动至存储寄存器&#xff0c…...

JAVA实战开源项目:购物商城网站(Vue+SpringBoot) 附源码

本文项目编号 T 032 ,文末自助获取源码 \color{red}{T032,文末自助获取源码} T032,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…...

C++学习——认识和与C的区别

目录 前言 一、什么是C 二、C关键字 三、与C语言不同的地方 3.1头文件 四、命名空间 4.1命名空间的概念写法 4.2命名空间的访问 4.3命名空间的嵌套 4.4命名空间在实际中的几种写法 五、输入输出 5.1cout 5.2endl 5.3cin 总结 前言 开启新的篇章,这里…...

Open FPV VTX开源之ardupilot双OSD配置摄像头

Open FPV VTX开源之ardupilot双OSD配置 1 源由2. 分析3. 配置4. 解决办法5. 参考资料 1 源由 鉴于笔者这台Mark4 Copter已经具备一定的历史,目前机载了两个FPV摄像头: 模拟摄像头数字摄像头(OpenIPC) 测试场景: 从稳定性的角度&#xff1…...

基于微信小程序高校课堂教学管理系统 课堂管理系统微信小程序(源码+文档)

目录 一.研究目的 二.需求分析 三.数据库设计 四.系统页面展示 五.免费源码获取 一.研究目的 困扰管理层的许多问题当中,高校课堂教学管理也是不敢忽视的一块。但是管理好高校课堂教学又面临很多麻烦需要解决,如何在工作琐碎,记录繁多的情况下将高校课堂教学的当前情况反…...

unity商店插件A* Pathfinding Project如何判断一个点是否在导航网格上?

需要使用NavGraph.IsPointOnNavmesh(Vector3 point) 如果点位于导航网的可步行部分,则为真。 如果一个点在可步行导航网表面之上或之下,在任何距离,如果它不在更近的不可步行节点之上 / 之下,则认为它在导航网上。 使用方法 Ast…...

三星手机人脸识别解锁需要点击一下电源键,能够不用点击直接解锁吗

三星手机的人脸识别解锁功能默认需要滑动或点击屏幕来解锁。这是为了增强安全性,防止误解锁的情况。如果希望在检测到人脸后直接进入主界面,可以通过以下设置调整: 打开设置: 进入三星手机的【设置】应用。 进入生物识别和安全&a…...

read+write实现:链表放到文件+文件数据放到链表 的功能

思路 一、 定义链表: 1 节点结构(数据int型) 2 链表操作(创建节点、插入节点、释放链表、打印链表)。 二、链表保存到文件 1打开文件 2遍历链表、写文件: 遍历链表,write()将节点数据写入文件。…...

猫怎么分公的母的?

各位铲屎官们,是不是刚领养了一只小猫咪,却分不清它是公是母?别急,今天就来给大家好好揭秘,如何轻松辨别猫咪的性别,让你不再为“它”是“他”还是“她”而烦恼! 一、观察生殖器位置 最直接的方…...

为何SAP S4系统中要设置MRP区域?MD04中可否同时显示工厂级、库存地点级的数据?

【SAP系统PP模块研究】 一、物料主数据的MRP区域设置 SAP ECC系统中想要指定不影响MRP运算的库存地点,是针对库存地点设置MRP标识,路径为:SPRO->生产->物料需求计划->计划->定义每一个工厂的存储地点MRP,如下图所示: 另外,在给物料主数据MMSC扩充库存地点时…...

Redis for AI

Redis存储和索引语义上表示非结构化数据(包括文本通道、图像、视频或音频)的向量嵌入。将向量和关联的元数据存储在哈希或JSON文档中,用于索引和查询。 Redis包括一个高性能向量数据库,允许您对向量嵌入执行语义搜索。可以通过过…...

初阶2 类与对象

本章重点 上篇1.面向过程和面向对象初步认识2.类的引入---结构体3.类的定义3.1 语法3.2 组成3.3 定义类的两种方法: 4.类的访问限定符及封装4.1 访问限定符4.2封装---面向对象的三大特性之一 5.类的作用域6.类的实例化7.类对象模型7.1 如何计算类对象的大小 8.this指…...

kafka-部署安装

一. 简述: Kafka 是一个分布式流处理平台,常用于构建实时数据管道和流应用。 二. 安装部署: 1. 依赖: a). Java:Kafka 需要 Java 8 或更高版本。 b). zookeeper: #tar fxvz zookeeper-3.7.0.tar.gz #…...

深入探讨防抖函数中的 this 上下文

深入剖析防抖函数中的 this 上下文 最近我在研究防抖函数实现的时候,发现一个耗费脑子的问题,出现了令我困惑的问题。接下来,我将通过代码示例,深入探究这些现象背后的原理。 示例代码 function debounce(fn, delay) {let time…...

人工智能丨Midscene:让UI自动化测试变得更简单

在这个数字化时代,每一个细节的优化都可能成为产品脱颖而出的关键。而对于测试人员来说,确保产品界面的稳定性和用户体验的流畅性至关重要。今天,我要向大家介绍一款名为Midscene的工具,它利用自然语言处理(NLP&#x…...

【数据结构】_链表经典算法OJ(力扣版)

目录 1. 移除链表元素 1.1 题目描述及链接 1.2 解题思路 1.3 程序 2. 反转链表 2.1 题目描述及链接 2.2 解题思路 2.3 程序 3. 链表的中间结点 3.1 题目描述及链接 3.2 解题思路 3.3 程序 1. 移除链表元素 1.1 题目描述及链接 原题链接:203. 移除链表…...

DeepSeek-R1技术报告速读

春节将至,DeepSeek又出王炸!DeepSeek-R1系列重磅开源。本文对其技术报告做简单解读。 话不多说,show me the benchmark。从各个高难度benchmark结果来看,DeepSeek-R1已经比肩OpenAI-o1-1217,妥妥的第一梯队推理模型。…...

560. 和为 K 的子数组

【题目】&#xff1a;560. 和为 K 的子数组 方法1. 前缀和 class Solution { public:int subarraySum(vector<int>& nums, int k) {int res 0;int n nums.size();vector<int> preSum(n 1, 0); // 下标从1开始存储for(int i 0; i < n; i) {preSum[i 1]…...

鸿蒙仓颉环境配置(仓颉SDK下载,仓颉VsCode开发环境配置,仓颉DevEco开发环境配置)

目录 ​1&#xff09;仓颉的SDK下载 1--进入仓颉的官网 2--点击图片中的下载按钮 3--在新跳转的页面点击即刻下载 4--下载 5--找到你们自己下载好的地方 6--解压软件 2&#xff09;仓颉编程环境配置 1--找到自己的根目录 2--进入命令行窗口 3--输入 envsetup.bat 4--验证是否安…...

NodeJs / Bun 分析文件编码 并将 各种编码格式 转为 另一个编码格式 ( 比如: GB2312→UTF-8, UTF-8→GB2312)

版本号 "iconv-lite": "^0.6.3", "chardet": "^2.0.0",github.com/runk/node-chardet 可以识别文本是 哪种编码 ( 大文件截取一部分进行分析,速度比较快 ) let bun_file_obj Bun.file(full_file_path) let file_bytes await bun_f…...

Java学习笔记(二十五)

1 Kafka Raft 简单介绍 Kafka Raft (KRaft) 是 Kafka 引入的一种新的分布式共识协议&#xff0c;用于取代之前依赖的 Apache ZooKeeper 集群管理机制。从 Kafka 2.8 开始&#xff0c;Kafka 开始支持基于 KRaft 的独立模式&#xff0c;计划在未来完全移除 ZooKeeper 的依赖。 1…...

Baklib如何结合内容中台与人工智能技术实现数字化转型

内容概要 在当前快速发展的数字环境中&#xff0c;企业面临着转型的紧迫性与挑战&#xff0c;尤其是在内容管理和用户互动的领域。内容中台作为一种集成化的解决方案&#xff0c;不仅能够提高企业在资源管理方面的效率&#xff0c;还能够为企业提供一致性和灵活性的内容分发机…...

git困扰的问题

.gitignore中添加的某个忽略文件并不生效 把某些目录或文件加入忽略规则&#xff0c;按照上述方法定义后发现并未生效&#xff0c; gitignore只能忽略那些原来没有被追踪的文件&#xff0c;如果某些文件已经被纳入了版本管理中&#xff0c;则修改.gitignore是无效的。 解决方…...

第05章 12 可视化热量流线图一例

下面是一个使用VTK&#xff08;Visualization Toolkit&#xff09;和C编写的示例代码&#xff0c;展示如何在一个厨房模型中可视化热量流线图&#xff0c;并按照热量传递速度着色显示。这个示例假设你已经安装了VTK库&#xff0c;并且你的开发环境已经配置好来编译和运行VTK程序…...

Vue组件开发-使用 html2canvas 和 jspdf 库实现PDF文件导出 设置页面大小及方向

在 Vue 项目中实现导出 PDF 文件、调整文件页面大小和页面方向的功能&#xff0c;使用 html2canvas 将 HTML 内容转换为图片&#xff0c;再使用 jspdf 把图片添加到 PDF 文件中。以下是详细的实现步骤和代码示例&#xff1a; 步骤 1&#xff1a;安装依赖 首先&#xff0c;在项…...

LTV预估 | 深度学习PLTV之开山鼻祖ZILN

&#x1f923; 这一集让我们欢迎基于深度学习的pltv方法&#xff1a;ZILN&#xff0c;ZILN可以说是后面很多研究的参考方法&#xff0c;我看了好几篇最新的pltv论文&#xff0c;都是基于ZILN来做的。 文章目录 1 精简总结2 背景&挑战&#xff1a;3 方法&#xff1a;实验&am…...

MFC常用操作

1&#xff0c;获取STATIC控件的值 CString str; m_STATIC2.GetWindowText(str);//获取STATIC控件的值 MessageBox(str); 2.设置EDIT控件的值 m_EDIT2.SetWindowText(str);//设置EDIT控件的值 GetDlgItem(IDC_EDIT1)->SetWindowText("Leave");//设置EDIT控件的值…...

第24篇 基于ARM A9处理器用汇编语言实现中断<六>

Q&#xff1a;怎样设计ARM处理器汇编语言程序使用定时器中断实现实时时钟&#xff1f; A&#xff1a;此前我们曾使用轮询定时器I/O的方式实现实时时钟&#xff0c;而在本实验中将采用定时器中断的方式。新增第三个中断源A9 Private Timer&#xff0c;对该定时器进行配置&#…...

【学习笔记】计算机网络(二)

第2章 物理层 文章目录 第2章 物理层2.1物理层的基本概念2.2 数据通信的基础知识2.2.1 数据通信系统的模型2.2.2 有关信道的几个基本概念2.2.3 信道的极限容量 2.3物理层下面的传输媒体2.3.1 导引型传输媒体2.3.2 非导引型传输媒体 2.4 信道复用技术2.4.1 频分复用、时分复用和…...

2025多目标优化创新路径汇总

多目标优化是当下非常热门且有前景的方向&#xff01;作为AI领域的核心技术之一&#xff0c;其专注于解决多个相互冲突的目标的协同优化问题&#xff0c;核心理念是寻找一组“不完美但均衡”的“帕累托最优解”。在实际中&#xff0c;几乎处处都有它的身影。 但随着需求场景的…...

图漾相机-ROS2-SDK-Ubuntu版本编译(新版本)

官网编译文档链接&#xff1a; https://doc.percipio.xyz/cam/latest/getstarted/sdk-ros2-compile.html 国内gitee下载SDK链接&#xff1a; https://gitee.com/percipioxyz 国外github下载SDK链接&#xff1a; https://github.com/percipioxyz 1.Camport ROS2 SDK 介绍 1.1 …...

字符设备驱动模版-中断

字符设备驱动模版-中断 思维导图在线高清查看&#xff1a;https://www.helloimg.com/i/2025/01/27/679791b5257c0.png 修改设备树 1添加pinctrl节点 1创建对应的节点 在 iomuxc 节点的 imx6ul-evk 子节点下 2添加“fsl,pins”属性 3在“fsl,pins”属性中添加PIN配置信息 …...

STM32 旋转编码器

旋转编码器简介 旋转编码器&#xff1a;用来测量位置、速度或旋转方向的装置&#xff0c;当其旋转轴旋转时&#xff0c;其输出端可以输出与旋转速度和方向对应的方波信号&#xff0c;读取方波信号的频率和相位信息即可得知旋转轴的速度和方向 类型&#xff1a;机械触点式/霍尔传…...

java ,springboot 对接支付宝支付,实现生成付款二维码,退款,查询订单状态等接口

查看文档 支付宝文档地址&#xff1a; 小程序文档 - 支付宝文档中心 使用沙箱环境 沙箱登录地址 登录 - 支付宝 点击查看 才能看钥匙截图写错了。。 问号可以看默认加密方式 点击沙箱帐号 这里我们就具备所有条件了 实战开始 pom文件增加依赖 <dependency> <gro…...

OpenCV:形态学梯度

目录 简述 1. 用图像运算和腐蚀实现形态学梯度 1.1 代码示例 1.2 运行结果 2. 形态学梯度接口 2.1 参数解释 2.2 代码示例 2.3 运行结果 3. 形态学梯度与边缘检测 4. 形态学梯度的应用场景 5. 注意事项 相关阅读 OpenCV&#xff1a;图像的腐蚀与膨胀-CSDN博客 简述…...

图漾相机搭配VisionPro使用简易教程

1.下载并安装VisionPro软件 请自行下载VisonPro软件。 VisionPro 9.0/9.5/9.6版本经测试&#xff0c;可正常打开图漾相机&#xff0c;建议使用图漾测试过的版本。 2.下载PercipioCameraForVisionPro软件包 使用浏览器下载&#xff1a;https://gitee.com/percipioxyz/camport3…...

《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》重印P126、P131勘误

勘误&#xff1a;打圈的地方有指数二字。 指数滤波器本身是错误的概念&#xff0c;我在书上打了一个叉&#xff0c;排版人员误删了。 滤波器部分从根本上有问题&#xff0c;本来要改&#xff0c;但是时间不够了。 和廖老师讨论多次后&#xff0c;决定大动。指数滤波器的概念…...

4、PyTorch 第一个神经网络,手写神经网络的基本部分组成

假设有一个二维数据集&#xff0c;目标是根据点的位置将它们分类到两个类别中&#xff08;例如&#xff0c;红色和蓝色点&#xff09;。 以下实例展示了如何使用神经网络完成简单的二分类任务&#xff0c;为更复杂的任务奠定了基础&#xff0c;通过 PyTorch 的模块化接口&#…...

Vue实现div滚动,并且支持top动态滚动

如果你知道距离目标 div 顶部的像素值&#xff0c;并希望通过传入 top 参数来实现滚动到对应区域&#xff0c;可以使用 window.scrollTo 方法。 编写滚动方法 const scrollToDiv (targetDiv, top) > {if (targetDiv) {top top * targetDiv.value.scrollHeight / data.he…...

【QT】- QUdpSocket

QUdpSocket 是 Qt 自带的一个类&#xff0c;属于 Qt 网络模块&#xff0c;用于进行 UDP&#xff08;用户数据报协议&#xff09; 通信。它提供了简便的接口来发送和接收 UDP 数据报&#xff08;datagrams&#xff09;。 UDP 是一种无连接的协议&#xff0c;适用于那些不需要确…...

WGCLOUD运维工具从入门到精通 - 如何设置主题背景

需要升级到WGCLOUD的v3.5.7或者以上版本&#xff0c;才会支持自定义设置主题背景色 WGCLOUD下载&#xff1a;www.wgstart.com 我们登录后&#xff0c;在右上角点击如下的小图标&#xff0c;就可以设置主题背景色了&#xff0c;包括&#xff1a;经典白&#xff08;默认&#x…...

【Elasticsearch】中数据流需要配置索引模板吗?

是的&#xff0c;数据流需要配置索引模板。在Elasticsearch中&#xff0c;数据流&#xff08;Data Streams&#xff09;是一种用于处理时间序列数据的高级结构&#xff0c;它背后由多个隐藏的索引组成&#xff0c;这些索引被称为后备索引&#xff08;Backing Indices&#xff0…...

Python 合并 Excel 单元格

合并 Excel 单元格是 Excel 数据处理和表格设计中的一项常用操作。例如&#xff0c;在制作表格标题时&#xff0c;经常会将多个单元格合并&#xff0c;使标题能够跨列显示&#xff0c;更加醒目和美观。此外&#xff0c;当对数据进行分类时&#xff0c;为了使同一类别的数据在视…...

C++中左值和右值的概念

文章目录 一、概要二、左值&#xff08;Lvalue&#xff09;二、右值&#xff08;Rvalue&#xff09;三、左值引用和右值引用四、左值和右值的使用场景五、总结 一、概要 在 C 中&#xff0c;左值&#xff08;Lvalue&#xff09;和右值&#xff08;Rvalue&#xff09;是两个非常…...

27.日常算法

1. 最后一个单词的长度 题目来源 给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 示例 1&#xff1a; 输入&#xff1a;s “Hello Wor…...

动态规划DP 数字三角形模型 传纸条(题目分析+C++完整代码)

传纸条 原题链接 AcWing 275. 传纸条 题目描述 小渊和小轩是好朋友也是同班同学&#xff0c;他们在一起总有谈不完的话题。 一次素质拓展活动中&#xff0c;班上同学安排坐成一个 m行 n 列的矩阵&#xff0c;而小渊和小轩被安排在矩阵对角线的两端&#xff0c;因此&#x…...

Spark入门(Python)

目录 一、安装Spark 二、Spark基本操作 一、安装Spark pip3 install pyspark 二、Spark基本操作 # 导入spark的SparkContext,SparkConf模块 from pyspark import SparkContext, SparkConf # 导入os模块 import os # 设置PYSPARK的python环境 os.environ[PYSPARK_PYTHON] &…...