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

PyTorch使用(3)-张量类型转换

文章目录

  • 张量类型转换
  • 1. 张量转换为 numpy 数组
    • 1.1. 默认行为:共享内存
    • 1.2. 避免内存共享
      • 1.2.1. 使用 .copy()
      • 1.2.2. 使用 torch.clone() + .numpy()
    • 1.3. 处理 GPU 张量
    • 1.4. 分离梯度跟踪
    • 1.5. 代码示例
    • 1.6. 关键注意事项
    • 1.7. 总结
  • 2. 标量张量和数字的转换
    • 2.1. torch.from_numpy():共享内存
    • 2.2. torch.tensor():独立内存
    • 2.3. 关键对比
    • 2.4. 注意事项
      • 2.4.1. 数据类型一致性
      • 2.4.2. GPU 张量转换
      • 2.4.3. 梯度跟踪
    • 2.5. 完整代码示例
    • 2.6. 最佳实践
  • 3. 标量张量和数字的转换
    • 3.1. 提取标量张量的值:item() 方法
    • 3.2. 强制类型转换(不推荐)
    • 3.3. 安全操作流程
      • 3.3.1. 确保张量为标量
      • 3.3.2. 处理设备与梯度
    • 3.4. 代码示例
    • 3.5. 关键注意事项
    • 3.6. 总结

张量类型转换

张量的类型转换也是经常使用的一种操作,是必须掌握的知识点。

1. 张量转换为 numpy 数组

在 PyTorch 中,张量(Tensor)与 NumPy 数组(ndarray)之间的转换是常见操作,但需要注意 内存共享机制。

1.1. 默认行为:共享内存

当张量位于 CPU 上时,直接使用 .numpy() 会生成共享底层内存的 NumPy 数组。修改其中一个对象会影响另一个:

import torch
import numpy as np# 创建 CPU 张量
tensor = torch.tensor([1, 2, 3])  # 默认在 CPU 上
numpy_array = tensor.numpy()      # 共享内存# 修改 NumPy 数组
numpy_array[0] = 100# 张量也会被修改!
print(tensor)  # 输出: tensor([100,   2,   3])

1.2. 避免内存共享

若需独立的数据副本,使用 .copy() 方法或 torch.clone():

1.2.1. 使用 .copy()

tensor = torch.tensor([1, 2, 3])
numpy_array = tensor.numpy().copy()  # 创建独立副本numpy_array[0] = 100
print(tensor)  # 输出: tensor([1, 2, 3])(原数据不变)

1.2.2. 使用 torch.clone() + .numpy()

tensor = torch.tensor([1, 2, 3])
cloned_tensor = tensor.clone()      # 创建张量副本
numpy_array = cloned_tensor.numpy() # 仍共享 cloned_tensor 的内存numpy_array[0] = 100
print(cloned_tensor)  # 输出: tensor([100, 2, 3])
print(tensor)         # 输出: tensor([1, 2, 3])

1.3. 处理 GPU 张量

若张量在 GPU 上,需先移动到 CPU 再转换:

# 创建 GPU 张量
tensor_gpu = torch.tensor([1, 2, 3], device="cuda")# 错误操作:直接转换会报错
try:numpy_array = tensor_gpu.numpy()
except RuntimeError as e:print("错误:", e)  # 需先将张量移至 CPU# 正确操作:移动到 CPU 再转换
tensor_cpu = tensor_gpu.cpu()
numpy_array = tensor_cpu.numpy()  # 共享内存

1.4. 分离梯度跟踪

若张量带有梯度(requires_grad=True),需先分离计算图:

tensor = torch.tensor([1.0, 2.0], requires_grad=True)# 错误操作:直接转换会警告
try:numpy_array = tensor.numpy()
except RuntimeError as e:print("错误:", e)# 正确操作:先分离梯度
detached_tensor = tensor.detach()  # 返回一个无梯度的新张量
numpy_array = detached_tensor.numpy()

1.5. 代码示例

import torch
import numpy as np# 示例1:共享内存(CPU 张量)
tensor_cpu = torch.tensor([1, 2, 3], dtype=torch.float32)
numpy_shared = tensor_cpu.numpy()
numpy_shared[0] = 100
print("共享内存 - 原张量:", tensor_cpu)  # tensor([100., 2., 3.])# 示例2:独立副本(使用 copy)
numpy_copy = tensor_cpu.numpy().copy()
numpy_copy[0] = 200
print("独立副本 - 原张量:", tensor_cpu)  # tensor([100., 2., 3.])# 示例3:GPU 张量处理
tensor_gpu = torch.tensor([4, 5, 6], device="cuda")
tensor_cpu = tensor_gpu.cpu()
numpy_gpu = tensor_cpu.numpy()
print("GPU 转 CPU 后数组:", numpy_gpu)  # [4 5 6]# 示例4:带梯度的张量
x = torch.tensor([3.0], requires_grad=True)
y = x * 2
detached_x = x.detach()
numpy_detached = detached_x.numpy()
numpy_detached[0] = 5.0
print("分离梯度后张量:", x)  # tensor([3.], requires_grad=True)

1.6. 关键注意事项

场景处理方式
避免内存共享使用 .copy() 或先 .clone() 再转换
GPU 张量先 .cpu() 移动至 CPU,再转换
梯度跟踪张量先 .detach() 分离计算图
数据类型一致性确保张量与 NumPy 数组数据类型兼容(如 float32 对应 np.float32)

1.7. 总结

共享内存:默认情况下,CPU 张量与 NumPy 数组共享内存,修改会同步。
独立副本:使用 .copy() 或 clone() + .numpy() 创建独立数据。
设备与梯度:处理 GPU 张量或带梯度张量时,需先移至 CPU 并分离梯度。

2. 标量张量和数字的转换

2.1. torch.from_numpy():共享内存

特点:
默认共享内存:生成的张量与原始 NumPy 数组共享底层内存,修改其中一个会影响另一个。
高效但风险:适合处理大型数据时节省内存,但需谨慎操作避免意外修改。

示例:

import numpy as np
import torch# 创建 NumPy 数组
numpy_array = np.array([1, 2, 3], dtype=np.float32)# 转换为张量(共享内存)
tensor_shared = torch.from_numpy(numpy_array)# 修改 NumPy 数组会影响张量
numpy_array[0] = 100
print("共享内存张量:", tensor_shared)  # 输出: tensor([100., 2., 3.])# 修改张量也会影响 NumPy 数组
tensor_shared[1] = 200
print("原始 NumPy 数组:", numpy_array)  # 输出: [100. 200.   3.]

避免共享内存:
若需独立副本,显式复制数据:

# 方法1:通过 NumPy 的 copy()
numpy_copy = numpy_array.copy()
tensor_independent = torch.from_numpy(numpy_copy)# 方法2:通过张量的 clone()
tensor_clone = tensor_shared.clone()

2.2. torch.tensor():独立内存

特点:
默认独立内存:生成的新张量会复制数据,与原始 NumPy 数组无内存共享。

安全但略低效:适合需要数据隔离的场景(如训练时预处理)。

示例:

numpy_array = np.array([1, 2, 3], dtype=np.float32)# 转换为张量(独立内存)
tensor_new = torch.tensor(numpy_array)# 修改 NumPy 数组不影响张量
numpy_array[0] = 100
print("独立内存张量:", tensor_new)  # 输出: tensor([1., 2., 3.])# 修改张量也不影响原数组
tensor_new[1] = 200
print("原始 NumPy 数组:", numpy_array)  # 输出: [100. 2. 3.]

2.3. 关键对比

方法内存共享性能适用场景
torch.from_numpy()大数据处理,需减少内存复制时使用
torch.tensor()需要数据隔离的场景(如训练数据)

2.4. 注意事项

2.4.1. 数据类型一致性

torch.from_numpy() 会保留 NumPy 数组的数据类型。
torch.tensor() 可手动指定 dtype:

tensor = torch.tensor(numpy_array, dtype=torch.float64)

2.4.2. GPU 张量转换

若需直接在 GPU 上创建张量,需显式指定设备:

# 共享内存 + GPU(需先复制到 CPU)
numpy_array = np.array([1, 2, 3])
tensor_gpu = torch.from_numpy(numpy_array).cuda()  # 复制到 GPU,不共享内存# 独立内存 + GPU
tensor_gpu = torch.tensor(numpy_array, device="cuda")

2.4.3. 梯度跟踪

若需张量参与梯度计算,推荐使用 torch.tensor():

x_np = np.array([3.0], dtype=np.float32)
x_tensor = torch.tensor(x_np, requires_grad=True)  # 可跟踪梯度
y = x_tensor**2
y.backward()
print(x_tensor.grad)  # 输出: tensor([6.])

2.5. 完整代码示例

import numpy as np
import torch# 示例1:共享内存转换
numpy_shared = np.array([1, 2, 3], dtype=np.int32)
tensor_shared = torch.from_numpy(numpy_shared)
numpy_shared[0] = 100
print("共享内存张量:", tensor_shared)  # tensor([100, 2, 3], dtype=torch.int32)# 示例2:独立内存转换
numpy_independent = np.array([4, 5, 6], dtype=np.float64)
tensor_independent = torch.tensor(numpy_independent, dtype=torch.float32)
numpy_independent[0] = 400
print("独立内存张量:", tensor_independent)  # tensor([4., 5., 6.])# 示例3:避免共享内存的显式复制
numpy_original = np.array([7, 8, 9])
tensor_copy = torch.from_numpy(numpy_original.copy())  # 独立副本
numpy_original[0] = 700
print("显式复制后的张量:", tensor_copy)  # tensor([7, 8, 9])

2.6. 最佳实践

优先选择 torch.tensor(): 默认数据隔离更安全,避免意外修改。

谨慎使用 torch.from_numpy(): 仅在明确需要共享内存且能控制同步时使用。

显式复制数据: 使用 .copy() 或 .clone() 确保数据独立。

统一数据类型和设备: 避免因类型或设备不匹配导致的错误。

3. 标量张量和数字的转换

在 PyTorch 中,处理标量张量(即只含有一个元素的张量)与 Python 数字之间的转换是常见操作,尤其是在训练过程中提取损失值、指标值等场景。以下是详细的方法说明及注意事项:

3.1. 提取标量张量的值:item() 方法

功能: 将标量张量(元素数量为 1)转换为 Python 数字(int 或 float)。

要求: 张量必须为标量(即 tensor.numel() == 1)。

示例:

import torch# 标量张量(单个元素)
scalar_tensor = torch.tensor(3.1415)
value = scalar_tensor.item()
print(value)          # 输出: 3.1415
print(type(value))   # 输出: <class 'float'># 非标量张量会报错
vector_tensor = torch.tensor([1, 2, 3])
try:vector_tensor.item()  # 报错:ValueError
except ValueError as e:print("错误:", e)  # 输出: only one element tensors can be converted to Python scalars

3.2. 强制类型转换(不推荐)

对于单元素张量,可通过强制类型转换(如 float()、int())直接提取值,但需注意:

要求:张量必须在 CPU 上且无梯度跟踪。

风险:若张量包含多个元素,会触发隐式的维度压缩(可能引发意外错误)。

示例:

# 标量张量
scalar_tensor = torch.tensor(5.0)
value = float(scalar_tensor)  # 5.0# 单元素张量(非标量)
single_element_tensor = torch.tensor([5.0])
value = float(single_element_tensor)  # 5.0(自动压缩维度)# 多元素张量会报错
vector_tensor = torch.tensor([1, 2])
try:float(vector_tensor)  # 报错:ValueError
except ValueError as e:print("错误:", e)

3.3. 安全操作流程

3.3.1. 确保张量为标量

使用 .squeeze() 或 .flatten() 去除冗余维度:

# 冗余维度张量(如形状为 (1, 1))
tensor = torch.tensor([[3.14]])
scalar_tensor = tensor.squeeze()  # 形状变为空张量 []
value = scalar_tensor.item()      # 3.14

3.3.2. 处理设备与梯度

若张量在 GPU 或带有梯度,需先移至 CPU 并分离计算图:

# GPU 上的标量张量
tensor_gpu = torch.tensor(2.0, device="cuda")
value = tensor_gpu.cpu().item()  # 移动到 CPU 后提取# 带梯度的标量张量
x = torch.tensor(3.0, requires_grad=True)
y = x**2
y.backward()
value = x.detach().item()  # 分离梯度后提取

3.4. 代码示例

import torch# 示例1:标准提取
scalar = torch.tensor(42)
print("标量值:", scalar.item())  # 42# 示例2:处理冗余维度
tensor = torch.tensor([[5.0]])
squeezed_tensor = tensor.squeeze()
print("压缩后形状:", squeezed_tensor.shape)  # torch.Size([])
print("提取值:", squeezed_tensor.item())    # 5.0# 示例3:GPU 张量处理
if torch.cuda.is_available():tensor_gpu = torch.tensor(6.28, device="cuda")tensor_cpu = tensor_gpu.cpu()print("GPU 张量值:", tensor_cpu.item())  # 6.28# 示例4:错误处理(非标量)
vector = torch.tensor([1, 2, 3])
try:vector.item()
except ValueError as e:print("错误信息:", e)  # only one element tensors can be converted to Python scalars

3.5. 关键注意事项

场景处理方式
标量张量直接使用 .item()
单元素但非标量先用 .squeeze() 压缩维度,再用 .item()
GPU 上的张量先 .cpu() 移动到 CPU,再 .item()
带梯度的张量先 .detach() 分离计算图,再 .item()
强制类型转换仅限单元素张量,需谨慎使用(推荐优先使用 .item())

3.6. 总结

优先使用 .item():安全且明确,专为标量设计。

避免强制类型转换:可能隐藏维度不匹配或设备不一致的问题。

处理复杂情况:通过 .squeeze()、.cpu()、.detach() 确保张量符合要求。

相关文章:

PyTorch使用(3)-张量类型转换

文章目录 张量类型转换1. 张量转换为 numpy 数组1.1. 默认行为&#xff1a;共享内存1.2. 避免内存共享1.2.1. 使用 .copy()1.2.2. 使用 torch.clone() .numpy() 1.3. 处理 GPU 张量1.4. 分离梯度跟踪1.5. 代码示例1.6. 关键注意事项1.7. 总结 2. 标量张量和数字的转换2.1. tor…...

基于FPGA的DDS连续FFT 仿真验证

基于FPGA的 DDS连续FFT 仿真验证 1 摘要 本文聚焦 AMD LogiCORE IP Fast Fourier Transform (FFT) 核心,深入剖析其在 FPGA 设计中的应用。该 FFT 核心基于 Cooley - Tukey 算法,具备丰富特性,如支持多种数据精度、算术类型及灵活的运行时配置。文中详细介绍了其架构选项、…...

【Spring 默认是否管理 Request 和 Session Bean 的生命周期?】

要测试 Spring 默认是否管理 Request 和 Session 作用域的 Bean 的生命周期&#xff0c;可以通过以下步骤实现&#xff1a; 验证 Spring 是否创建了 Bean&#xff1a;检查 Spring 容器是否成功加载并管理了 Request 和 Session 作用域的 Bean。验证 Bean 的生命周期回调方法是…...

Git的基本指令

一、回滚 1.git init 在项目文件夹中打开bash生成一个.git的子目录&#xff0c;产生一个仓库 2.git status 查看当前目录下的所有文件的状态 3.git add . 将该目录下的所有文件提交到暂存区 4.git add 文件名 将该目录下的指定文件提交到暂存区 5.git commit -m 备注信…...

【微信小程序(云开发模式)变通实现DeepSeek支持语音】

整体架构 前端&#xff08;微信小程序&#xff09;&#xff1a; 使用微信小程序云开发能力&#xff0c;实现录音功能。将录音文件上传到云存储。调用云函数进行语音识别和 DeepSeek 处理。界面模仿 DeepSeek&#xff0c;支持文本编辑。 后端&#xff08;云函数 Node.js&#…...

前端使用 crypto-js库AES加解密

前端使用 crypto-js库AES加解密 为什么需要前端加密&#xff1f; 现在项目使用http协议&#xff0c;且登录界面的用户登录密码是明文传输&#xff0c;项目真正上线后&#xff0c;存在信息泄露风险。 所以准备用前端框架加密处理用户输入的密码再传输。 crypto-js 库 crypto…...

七天MySQL密集学习计划

七天MySQL密集学习计划 第1天&#xff1a;MySQL基础和环境搭建 上午&#xff08;理论安装&#xff09; 数据库基本概念MySQL是什么关系型数据库基础安装MySQL Windows/Mac下安装步骤MySQL Workbench安装 基本配置和连接 下午&#xff08;基础操作&#xff09; 数据库和表的…...

Python程序常用的配置文件格式及例子(上)

Python 中常用的配置文件格式有多种&#xff0c;每种格式都有其特点和适用场景。以下是常见的配置文件类型及简要说明&#xff1a; 1. INI 格式 特点&#xff1a;简单键值对&#xff0c;支持分节&#xff08;Section&#xff09;。文件扩展名&#xff1a;.ini, .cfgPython 库&…...

Go语言对于MySQL的基本操作

一.下载依赖 终端中输入&#xff1a; go get -u github.com/go-sql-driver/mysql 导入包 import ("database/sql"_ "github.com/go-sql-driver/mysql" ) 二.案例 package main//go get-u github.com/go-sql-driver/mysql 获取驱动 import ("databa…...

一键批量txt转DWG,DWG转txt——插件实现 CAD c#二次开发

如下图&#xff0c;我们有大量dwg需要转为txt格式&#xff0c;或txt格式坐标需要转为dwg格式&#xff0c;此插件可一键完成一个文件夹下所有文件的转换。 插件使用方式 命令行输入&#xff1a; netload 加载此dll插件&#xff0c; 输入&#xff1a; dwg2txt 可将dwg转为t…...

SpringBoot 集成 Minio (附带工具类)

Minio 官方文档&#xff1a; https://www.minio.org.cn/docs/minio/container/index.html MinIO是一个对象存储解决方案&#xff0c;它提供了与Amazon Web Services S3兼容的API&#xff0c;并支持所有核心S3功能。 MinIO有能力在任何地方部署 - 公有云或私有云&#xff0c;裸…...

图论——Prim算法

53. 寻宝(第七期模拟笔试) 题目描述 在世界的某个区域,有一些分散的神秘岛屿,每个岛屿上都有一种珍稀的资源或者宝藏。国王打算在这些岛屿上建公路,方便运输。 不同岛屿之间,路途距离不同,国王希望你可以规划建公路的方案,如何可以以最短的总公路距离将 所有岛屿联通…...

Linux系统上后门程序的原理细节,请仔细解释一下

在Linux系统上&#xff0c;后门程序通常通过隐蔽的方式绕过正常的安全机制&#xff0c;允许攻击者未经授权访问系统。以下是其工作原理的详细解释&#xff1a; 1. 隐蔽性 隐藏进程&#xff1a;后门程序常通过修改进程列表或使用rootkit技术隐藏自身&#xff0c;避免被ps、top…...

Cursor与Blender-MCP生成3D模型

随着DeepSeek的热度&#xff0c;各行各业接入AI智能&#xff0c;当然作为一个深受3D爱好者喜爱的软件——Blender&#xff0c;也接入了AI智能&#xff0c;通过Blender-MCP&#xff0c;开启一场Blender的智能化模型创建的世界之旅。 目录 1.准备工作2.环境配置2.1 Mac安装2.2 W…...

Object 转 JSONObject 并排除null和““字符串

public static JSONObject objToJSONObject(Object obj) throws Exception{//创建一个 HashMap 对象 map&#xff0c;用于存储对象的属性名和属性值。//key 是属性名&#xff08;String 类型&#xff09;&#xff0c;value 是属性值&#xff08;Object 类型&#xff09;Map<…...

物联网为什么用MQTT不用 HTTP 或 UDP?

先来两个代码对比&#xff0c;上传温度数据给服务器。 MQTT代码示例 // MQTT 客户端连接到 MQTT 服务器 mqttClient.connect("mqtt://broker.server.com:8883", clientId) // 订阅特定主题 mqttClient.subscribe("sensor/data", qos1) // …...

LeetCode135☞分糖果

关联LeetCode题号135 本题特点 贪心两次遍历&#xff0c;一次正序遍历&#xff0c;只比较左边&#xff0c;左边比右边大的情况 i-1 i一次倒序遍历&#xff0c;只比较右边的&#xff0c;右边比左边大 i1 i 本题思路 class Solution:def candy(self, ratings: List[int]) -&g…...

YOLO魔改之频率分割模块(FDM)

目标检测原理 目标检测是一种将目标分割和识别相结合的图像处理技术,旨在从图像中定位并识别特定目标。深度学习方法,如Faster R-CNN和YOLO系列,已成为主流解决方案。这些方法通常采用两阶段或单阶段策略,通过卷积神经网络(CNN)提取特征并进行分类和定位。 在小目标检测中…...

AI学习——卷积神经网络(CNN)入门

作为人类&#xff0c;我们天生擅长“看”东西&#xff1a;一眼就能认出猫狗、分辨红绿灯、读懂朋友的表情……但计算机的“眼睛”最初是一片空白。直到卷积神经网络&#xff08;CNN&#xff09;​的出现&#xff0c;计算机才真正开始理解图像。今天&#xff0c;我们就用最通俗的…...

【资源损坏类故障】:详细了解坏块

目录 1、物理坏块与逻辑坏块 1.1、物理坏块 1.2、逻辑坏块 2、两个坏块相关的参数 2.1、db_block_checksum 2.2、db_block_checking 3、检测坏块 3.1、告警日志 3.2、RMAN 3.3、ANALYZE 3.4、数据字典 3.5、DBVERIFY 4、修复坏块 4.1、RMAN修复 4.2、DBMS_REPA…...

Django系列教程(13)——Cookie和Session应用场景及案例

目录 什么是cookie&#xff0c;cookie的应用场景及缺点 Django中如何使用cookie Cookie使用示例 什么是session及session的工作原理 Django中如何使用会话session Session使用示例 小结 HTTP协议本身是”无状态”的&#xff0c;在一次请求和下一次请求之间没有任何状态保…...

给管理商场消防安全搭建消防安全培训小程序全过程

一、需求沟通 “我是管理商场消防安全的嘛&#xff0c;做这个的作用呢&#xff0c;1是商场的所有商户员工可以看平面或者视频随时自学&#xff0c; 2是我们定期培训必修课程、考试&#xff0c;这个需要留存他们的手签字的签到表确认我们讲给他们听了&#xff08;免责很重要&am…...

YOLOv11 目标检测

本文章不再赘述anaconda的下载以及虚拟环境的配置&#xff0c;博主使用的python版本为3.8 1.获取YOLOv11的源工程文件 链接&#xff1a;GitHub - ultralytics/ultralytics: Ultralytics YOLO11 &#x1f680; 直接下载解压 2.需要自己准备的文件 文件结构如下&#xff1a;红…...

数据库原理实验报告:Powerdesigner建模E-R模型并转换表

注&#xff1a;此实验并不完整&#xff0c;仅供参考&#xff0c;如需完整版请私我留言 一、实验目的&#xff1a; 二、实验工具&#xff1a; 三、实验要求&#xff1a; 四、实验过程&#xff1a; 图文并茂&#xff0c;每一步都包含详细图片&#xff0c;总共11页word&#xff01…...

【愚公系列】《高效使用DeepSeek》018-错题本整理

🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! 👉 江湖人称"愚公搬代码",用七年如一日的精神深耕技术领域,以"…...

面试八股 —— Redis篇

重点&#xff1a;缓存 和 分布式锁 缓存&#xff08;穿透&#xff0c;击穿&#xff0c;雪崩&#xff09; 降级可作为系统的保底策略&#xff0c;适用于穿透&#xff0c;击穿&#xff0c;雪崩 1.缓存穿透 2.缓存击穿 3.缓存雪崩 缓存——双写一致性 1.强一致性业务&#xff08…...

maven的安装配置

目录 一、官网下载压缩包 二、配置环境变量 设置 MAVEN_HOME 添加 MAVEN_HOME\bin 到 PATH 三、配置本机仓库和远程仓库 四、配置idea 一、官网下载压缩包 Download Apache Maven – Maven 如上图。选择这个压缩包 选择好文件&#xff0c;下载完后&#xff0c;配置环境变…...

SpringCloud系列教程(十四):Sentinel持久化

Sentinel之前已经搭建和应用成功了&#xff0c;但是它有一个很大的缺点就是官方没有提供持久化的方案&#xff0c;从项目源码上看感觉这款工具也没有完成的太好&#xff0c;所以需要我们去对它进行二次开发。要补充的功能大概如下&#xff1a; 1、将Sentinel接入nacos中&#…...

深度学习处理时间序列(1)

不同类型的时间序列任务 时间序列&#xff08;timeseries&#xff09;是指定期测量获得的任意数据&#xff0c;比如每日股价、城市每小时耗电量或商店每周销售额。无论是自然现象&#xff08;如地震活动、鱼类种群的演变或某地天气&#xff09;还是人类活动模式&#xff08;如…...

微前端 qiankun vite vue3

文章目录 简介主应用 qiankun-main vue3 vite子应用 qiankun-app-vue2 webpack5子应用 qiankun-react webpack5子应用 quankun-vue3 vite遇到的问题 简介 主要介绍以qiankun框架为基础&#xff0c;vite 搭建vue3 项目为主应用&#xff0c;wepack vue2 和 webpack react 搭建的…...

【ArduPilot】Windows下使用Optitrack通过MAVProxy连接无人机实现定位与导航

Windows下使用Optitrack通过MAVProxy连接无人机实现定位与导航 配置动捕系统无人机贴动捕球配置无人机参数使用MAVProxy连接Optitrack1、连接无人机3、设置跟踪刚体ID4、校正坐标系5、配置IP地址&#xff08;非Loopback模式&#xff09;6、启动动捕数据推流 结语 在GPS信号弱或…...

【GPT入门】第24课 langfuse介绍

【GPT入门】第24课 langfuse介绍 1. langfuse概念与作用2. 代码3. 页面效果4. 设计模式1. 装饰器模式2. 上下文管理模式1. langfuse概念与作用 Langfuse是一款专为大规模语言模型(LLM)应用开发设计的开源平台。其作用主要包括以下几个方面: 提升开发效率:通过消除LLM应用构…...

基于javaweb的SpringBoot食品溯源系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...

SVN简明教程——下载安装使用

SVN教程目录 一、开发中的实际问题二、简介2.1 版本控制2.2 Subversion2.3 Subversion的优良特性2.4 工作原理2.5 SVN基本操作 三、Subversion的安装与配置1. 服务器端程序版本2. 下载源码包3. 下载二进制安装包4. 安装5. 配置版本库① 为什么要配置版本库&#xff1f;② 创建目…...

AJAX的理解和原理还有概念

你想问的可能是 AJAX&#xff08;Asynchronous JavaScript and XML&#xff09; &#xff0c;它并不是一门新的编程语言&#xff0c;而是一种在无需重新加载整个网页的情况下&#xff0c;能够与服务器进行异步通信并更新部分网页的技术。以下从基本概念、原理、优点、使用场景等…...

利用AI让数据可视化

1. 从问卷星上下载一份答题结果。 序号用户ID提交答卷时间所用时间来源来源详情来自IP总分1、《中华人民共和国电子商务法》正式实施的时间是&#xff08;&#xff09;。2、&#xff08;&#xff09;可以判断企业在行业中所处的地位。3、&#xff08;&#xff09;是指店铺内有…...

FOC——Butterworth (巴特沃斯)数字滤波器(2025.03.18)

参考链接1: [DSP] Butterworth &#xff08;巴特沃斯&#xff09;数字滤波器设计参考 参考链接2: 陈佩青《数字信号处理教程》 参考链接3: ButterWorthFIlter(巴特沃斯滤波器) 在此感谢各位前辈大佬的总结&#xff0c;写这个只是为了记录学习大佬资料的过程&#xff0c;内容基本…...

Redis如何实现持久化

Redis如何实现持久化 Redis默认将所有数据存储在内存中&#xff0c;虽然读写效率极高&#xff0c;但存在两大风险 数据易失性&#xff1a;进程重启或服务器宕机导致内存数据丢失。恢复成本高&#xff1a;无法直接通过内存重建大规模数据集。 Redis作为高性能的键值数据库&…...

docker安装rabbitmq并配置hyperf使用

为满足您的高标准需求&#xff0c;我将分步骤为您详细解释如何通过Docker安装RabbitMQ服务器&#xff0c;并展示如何配置PHP的Hyperf框架来使用RabbitMQ。 安装RabbitMQ&#xff1a; 获取RabbitMQ镜像在终端中运行以下命令来拉取RabbitMQ的官方Docker镜像&#xff1a; docker …...

极空间NAS部署gitea教程

极空间NAS部署gitea步骤教程 背景1. 准备镜像1.1 极空间官方1.2 Win系统docker再上传1.3 镜像转录 2. MySql配置2.1 容器配置2.2 命令行配置 3. gitea配置3.1 容器配置3.2 打开网页3.3 网页配置安装 参考资料 背景 极空间Nas和别的Nas不同的地方就在于&#xff0c;他不是那种标…...

大模型学习-从零开始在colab训练大模型

目录 写这篇文章的目的 1.准备训练所需的文件 2.将压缩包上传到谷歌云盘 使用colab 3.训练 写这篇文章的目的 这篇文章是对&#xff1a;大模型学习-在colab中训练并更换模型_colab调整模型-CSDN博客的一个优化&#xff0c;因为在之前的博文中&#xff0c;我是提供了一个现…...

【商城实战(38)】Spring Boot:从本地事务到分布式事务,商城数据一致性的守护之旅

【商城实战】专栏重磅来袭&#xff01;这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建&#xff0c;运用 uniapp、Element Plus、SpringBoot 搭建商城框架&#xff0c;到用户、商品、订单等核心模块开发&#xff0c;再到性能优化、安全加固、多端适配&#xf…...

漏洞知识点《PHP数组绕过深入解析》

在PHP中&#xff0c;通过数组绕过安全限制的核心原理与PHP语言特性和底层实现机制密切相关。以下是具体原因及技术细节分析&#xff1a; 一、PHP参数解析机制的特性 PHP的$_GET、$_POST等超全局变量支持将用户输入自动解析为数组。例如&#xff0c;通过URL参数?username[0]a…...

【极光 Orbit·STC8x】05. GPIO库函数驱动LED流动

【极光 OrbitSTC8】05. GPIO库函数驱动LED流动 七律 逐光流转 八灯列阵若星河&#xff0c;状态为舟渡长波。 寄存器中藏玄机&#xff0c;Switch语句定山河。 循环往复如潮涌&#xff0c;步骤变量掌沉浮。 单片机前展锋芒&#xff0c;代码织就光之舞。 摘要 本文基于STC8H8K6…...

SSH配置过程及无法正常链接问题的解决【小白教学】

1.尝试克隆github上的项目&#xff0c;发现无法正常下载【之前有些是可以的】 git clone https://github.com/mogualla/PythonRobotics.git --depth 3 出现下面的提示【错误】&#xff1a; Cloning into PythonRobotics... fatal: unable to access https://github.com/mogua…...

总结 HTTP 协议的基本格式, 相关知识以及抓包工具fiddler的使用

目录 1 HTTP是什么 2 HTTP协议格式 3 HTTP请求(Request) 3.1 认识URL 3.2 方法 3.3 认识请求"报头"(header) 3.3.1 Host 3.3.2 Content-Length 3.3.3 Content-Type 3.3.4 User-Agent (简称UA) 3.3.5 Referer 3.3.6 Cookie和Session 4 HTTP响应详解 4.…...

Conda 虚拟环境创建:加不加 Python 版本的深度剖析

在 conda 中创建虚拟环境时&#xff0c;是否指定 Python 具体版本会直接影响环境构建的底层逻辑、依赖管理方式以及后续开发的可控性。 一、核心机制对比 不指定 Python 版本 (conda create -n env_name) 默认继承基础环境版本 Conda 会使用当前基础环境&#xff08;如 base&am…...

docker的anythingllm和open-webui压缩包分享(国内镜像拉取,百度云压缩包分享)

文章目录 前言第一部分&#xff1a;镜像获取&#x1f680; 方式一&#xff1a;切换国内下载镜像✅1. 下载anythingllm✅ 2. 下载open-webui &#x1f680;方式二&#xff1a;下载我分享的百度云✅ anythingllm压缩包百度云链接❎ open-webui压缩包 第二部分&#xff1a;下载之后…...

C#命令行参数用法

C#命令行参数用法 static void Main(string[] args){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);// 解析命令行参数if (args.Length > 0){// 这里处理命令行参数&#xff0c;例如&#xff1a;打开文件、设置配置等// 例如&…...

Unity3D开发AI桌面精灵/宠物系列 【二】 语音唤醒 ivw 的两种方式-Windows本地或第三方讯飞等

Unity3D 交互式AI桌面宠物开发系列【二】ivw 语音唤醒 该系列主要介绍怎么制作AI桌面宠物的流程&#xff0c;我会从项目开始创建初期到最终可以和AI宠物进行交互为止&#xff0c;项目已经开发完成&#xff0c;我会仔细梳理一下流程&#xff0c;分步讲解。 这篇文章主要讲有关于…...