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

时间序列数据集增强构造方案(时空网络建模)

时间序列数据集增强构造方案(时空网络建模)

时间序列数据集TimeSeriesDataset
时间序列数据集增强EnhancedTimeSeriesDataset

一、方案背景与动机

1.1 背景分析

传统时间序列预测方法(如ARIMA、Prophet等)以及很多深度学习方法(如 TFT、DeepAR、Auto former等模型)主要关注单序列的时序模式以及对应的协变量,不考虑实体间(序列间)的依赖关系。不考虑实体间依赖关系的训练集可以通过TimeSeriesDataset构建,但在现代商业场景中,实体间往往存在复杂的依赖关系,这时就需要更复杂的数据集生成方式。具体业务中的实体依赖关系比如:

  • 零售场景:互补商品(咖啡机与咖啡胶囊,排骨和玉米/冬瓜)存在连带销售效应,替代商品(肋排和汤小排)存在竞争销售效应

  • 能源场景:相邻变电站的电力负荷存在空间相关性

  • 交通场景:相邻路段的交通流量相互影响

现有解决方案的局限性:

  • 孤立预测:独立处理各实体序列,忽视跨实体关联

  • 静态关系:无法动态捕捉随时间变化的依赖模式

  • 计算效率:全连接注意力机制导致计算复杂度爆炸式增长,销量预测场景中实体百万量级,全连接图无法满足内存需求

1.2 设计动机

本方案旨在解决以下核心问题:

  • 关系建模:显式建模具有业务逻辑的实体依赖关系(替代/互补/空间邻近等),同时建模时空依赖关系

  • 效率优化:通过分组批处理减少无效计算,分组批处理可以理解为一个子图,每个节点代表一个实体(一个时间序列)

  • 兼容性:保持与传统时间序列模型的接口一致性,在传统时间序列数据模型的接口上进行继承和增强

二、应用场景

2.1典型应用案例

场景依赖类型数据特征
零售销量预测替代关系(竞品商品)
互补关系(配套商品)
多门店×多商品×时间序列(多变量,销量、活动、calendar、weather等)
电力负荷预测空间邻近关系
电压等级关联
多变电站×时间序列
交通流量预测路段连通性
时段相关性
多路段×时间序列

2.2业务价值

  • 提升预测精度:通过关联序列信息修正预测偏差,比如建模商品替代互补作用对销量的影响,替代关系中A品有大折扣会导致B销量降低,互补关系中A品大折扣会带着B销量增高
  • 增强可解释性:可视化注意力权重揭示商品关联强度,可以挖掘商品替代互补关系强度、路段连通性等
  • 优化库存管理:基于互补关系预测优化备货策略

三、批处理方案详解

3.1 核心设计思想

批处理架构图

graph TDA[原始数据] --> B{依赖关系定义}B --> C[Cluster分组,子图]C --> D[批次采样,每次一个cluster子图]D --> E[动态填充]E --> F[模型训练]

3.2 关键技术实现

(1) ClusterBatchSampler

关键特性:

  • 依赖关系保持:确保同cluster样本同批次
  • 灵活批次控制:
    • shuffle=True:打乱cluster顺序(保持cluster内顺序)
    • drop_last=True:丢弃不足批次大小的尾部数据
  • 高效内存管理:预先生成所有批次索引

与DataLoader的协作:

DataLoader参数作用本方案设置
batch_sampler替代默认采样逻辑使用ClusterBatchSampler实例
collate_fn自定义批次组装逻辑使用 cluster_collate_fn
shuffle全局打乱数据必须设为 False

(2) 动态填充策略

填充策略优势:

  • 形状一致性:确保张量维度统一
  • 信息无损:原始数据完整保留
  • 灵活配置:支持动态/固定批次大小

3.3与传统方案的对比

维度传统方案本方案
实体关系处理忽略显式建模
内存占用全连接矩阵存储仅存储分组索引
业务适配性通用场景可定制依赖关系

四、总结

本方案通过创新的批处理机制,在传统时间序列预测框架中引入实体关系建模能力,为复杂业务场景提供了有效的解决方案。建议根据实际业务需求调整依赖关系定义策略,并通过可视化工具持续监控模型学习效果。

五、代码

import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.utils.data import DataLoader, Dataset
from collections import defaultdict
import random
import numpy as np
import pandas as pd
from sklearn.preprocessing import LabelEncoderclass EnhancedTimeSeriesDataset(TimeSeriesDataset): ## 继承TimeSeriesDatasetdef __init__(self, dependency_clusters: dict,  # {group_id: cluster_id}**kwargs):"""增强版时间序列数据集Args:dependency_clusters (dict): 定义分组关系的字典**kwargs: 原始TimeSeriesDataset参数"""super().__init__(**kwargs)# 存储分组信息self.dependency_clusters = dependency_clusters# 构建cluster索引self._build_cluster_index()def _build_cluster_index(self):"""构建cluster到样本索引的映射"""self.cluster_to_indices = defaultdict(list)for idx, sample in enumerate(self.samples):group_id = sample["group_id"]cluster_id = self.dependency_clusters.get(group_id, -1)  # -1表示未分组self.cluster_to_indices[cluster_id].append(idx)class ClusterBatchSampler:def __init__(self, dataset, batch_size, shuffle=True, drop_last=False):"""基于cluster的批采样器Args:dataset: EnhancedTimeSeriesDataset实例batch_size: 目标批次大小shuffle: 是否打乱cluster顺序drop_last: 是否丢弃不足批次"""self.batch_size = batch_sizeself.shuffle = shuffleself.drop_last = drop_last# 按cluster组织索引self.batches = []for cluster_id, indices in dataset.cluster_to_indices.items():if cluster_id == -1:  # 跳过未分组样本continue# 打乱cluster内部顺序if shuffle:random.shuffle(indices)# 拆分cluster为多个批次,如果batch_size大于cluster size,则一个cluster在一个batch内for i in range(0, len(indices), batch_size):batch = indices[i:i+batch_size]if not drop_last or len(batch) == batch_size:self.batches.append(batch)# 打乱批次顺序if shuffle:random.shuffle(self.batches)def __iter__(self):return iter(self.batches)def __len__(self):return len(self.batches)def cluster_collate_fn(batch, dataset, fixed_batch_size=None):"""增强版批处理函数Args:batch: 原始批次数据dataset: 数据集实例fixed_batch_size: 固定批次大小(None表示动态大小)"""# 动态填充逻辑current_size = len(batch)padding_samples = []if fixed_batch_size is not None and current_size < fixed_batch_size:# 生成填充样本for _ in range(fixed_batch_size - current_size):padding_samples.append({"encoder_input": torch.full((dataset.max_encoder_length, len(dataset.encoder_features)), dataset.padding_value),"decoder_input": torch.full((dataset.max_decoder_length, len(dataset.decoder_features)), dataset.padding_value),"target": torch.full((dataset.max_decoder_length,), dataset.padding_value),"encoder_mask": torch.zeros(dataset.max_encoder_length),"decoder_mask": torch.zeros(dataset.max_decoder_length),"static_features": torch.zeros(len(dataset.static_features), dtype=torch.long),"actual_lengths": (0, 0)})# 合并真实数据和填充数据full_batch = batch + padding_samples# 转换张量collated = {}for key in batch[0].keys():if key == "actual_lengths":L = [item[key][0] for item in full_batch]D = [item[key][1] for item in full_batch]collated["actual_lengths"] = (torch.tensor(L), torch.tensor(D))else:collated[key] = torch.stack([item[key] for item in full_batch])# 生成批次掩码if fixed_batch_size is not None:batch_mask = torch.zeros(fixed_batch_size, dtype=torch.float)batch_mask[:current_size] = 1.0collated["batch_mask"] = batch_maskreturn collatedclass SpatioTemporalTransformer(nn.Module):def __init__(self, input_dim, nhead=8, hidden_dim=256):super().__init__()# 位置编码self.pos_encoder = nn.Embedding(1000, input_dim)  # 假设最大序列长度1000# 跨序列注意力层self.cross_attention = nn.MultiheadAttention(embed_dim=input_dim,num_heads=nhead,batch_first=True)# 前馈网络self.ffn = nn.Sequential(nn.Linear(input_dim, hidden_dim),nn.ReLU(),nn.Linear(hidden_dim, input_dim))def forward(self, x, batch_mask=None):"""Args:x: 输入序列 [B, L, D]batch_mask: 批次掩码 [B]"""B, L, D = x.size()# 位置编码positions = torch.arange(L, device=x.device).expand(B, L)x = x + self.pos_encoder(positions)# 跨序列注意力if batch_mask is not None:padding_mask = ~batch_mask.bool()  # 反转掩码else:padding_mask = None# 维度变换 [B, L, D] -> [L, B, D]x = x.permute(1, 0, 2)# 计算注意力attn_output, _ = self.cross_attention(query=x,key=x,value=x,key_padding_mask=padding_mask)# 维度恢复 [L, B, D] -> [B, L, D]attn_output = attn_output.permute(1, 0, 2)# 前馈网络output = self.ffn(attn_output)return output# 使用示例
if __name__ == "__main__":# 创建测试数据dates = pd.date_range(start="2023-01-01", periods=90, name="target_date")example_data = pd.DataFrame({"store_id": np.repeat([1, 2], 45),"product_id": np.repeat([101, 102], 45),"target_date": np.tile(dates, 2),"sale_amount": np.random.randint(0, 100, 180),"discount": np.random.rand(180),"precipitation": np.random.rand(180),"temperature": np.random.rand(180),})# 定义分组关系,示例:互补商品分组dependency_clusters = {(1, 101): 0,(1, 102): 0,  # 同一cluster(2, 101): 1,(2, 102): 1   # 另一cluster}# 初始化数据集dataset = EnhancedTimeSeriesDataset(data=example_data,dependency_clusters=dependency_clusters,max_encoder_length=35,min_encoder_length=14,max_decoder_length=14,min_decoder_length=7,num_samples_per_step=1)# 创建数据加载器dataloader = DataLoader(dataset,batch_sampler=ClusterBatchSampler(dataset, batch_size=32, shuffle=True),collate_fn=lambda b: cluster_collate_fn(b, dataset, fixed_batch_size=32),num_workers=4)# 初始化模型model = SpatioTemporalTransformer(input_dim=len(dataset.encoder_features),nhead=4,hidden_dim=128)# 训练循环optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)for epoch in range(10):for batch in dataloader:# 前向传播encoder_input = batch["encoder_input"]  # [32, 35, 4]batch_mask = batch.get("batch_mask", None)output = model(encoder_input, batch_mask)# 计算损失(示例)target = batch["target"]  # [32, 14]loss = F.mse_loss(output[:, -14:], target)  # 取最后14个时间步# 反向传播optimizer.zero_grad()loss.backward()optimizer.step()print(f"Epoch {epoch} Loss: {loss.item():.4f}")

相关文章:

时间序列数据集增强构造方案(时空网络建模)

时间序列数据集增强构造方案&#xff08;时空网络建模&#xff09; 时间序列数据集TimeSeriesDataset 时间序列数据集增强EnhancedTimeSeriesDataset 一、方案背景与动机 1.1 背景分析 传统时间序列预测方法&#xff08;如ARIMA、Prophet等&#xff09;以及很多深度学习方法…...

实验六 基于Python的数字图像压缩算法

一、实验目的  掌握图像压缩的必要性&#xff1b;  掌握常见的图像压缩标准&#xff1b;  掌握常见的图像压缩方法分类&#xff1b;  掌握常见的图像压缩方法原理与实现&#xff08;包括哈夫曼编码、算术编码、行程编码方法等&#xff09;&#xff1b;  了解我国音视…...

Vue 3 中的 nextTick 使用详解与实战案例

Vue 3 中的 nextTick 使用详解与实战案例 在 Vue 3 的日常开发中&#xff0c;我们经常需要在数据变化后等待 DOM 更新完成再执行某些操作。此时&#xff0c;nextTick 就成了一个不可或缺的工具。本文将介绍 nextTick 的基本用法&#xff0c;并通过三个实战案例&#xff0c;展示…...

Docker + Watchtower 实现容器自动更新:高效运维的终极方案

文章目录 前言一、Watchtower 简介二、Watchtower 安装与基本使用1. 快速安装 Watchtower2. 监控特定容器 三、Watchtower 高级配置1. 设置检查间隔2. 配置更新策略3. 清理旧镜像4. 通知设置 四、生产环境最佳实践1. 使用标签控制更新2. 更新前执行健康检查3. 结合CI/CD流水线 …...

OpenCV 中用于背景分割(背景建模)的一个类cv::bgsegm::BackgroundSubtractorGSOC

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::bgsegm::BackgroundSubtractorGSOC 是 OpenCV 中用于背景分割&#xff08;背景建模&#xff09;的一个类&#xff0c;它是基于 GMM&#xff…...

AI恶魔之眼使用说明书

AI恶魔之眼使用说明书 产品简介 1.1 产品介绍 AI恶魔之眼是一款具备动态视觉效果与仿生眼睛模拟功能的智能显示产品&#xff0c;可实现以下特性&#xff1a; 真实人眼模拟&#xff1a;支持虹膜样式变换、眨眼动画、瞳孔缩放等动态特效&#xff0c;仿真度高自定义内容上传&am…...

PBR材质-Unity/Blender/UE

目录 前言&#xff1a; 一、Unity&#xff1a; 二、Blender&#xff1a; 三、UE&#xff1a; 四、全家福&#xff1a; 五、后记&#xff1a; 前言&#xff1a; PBR流程作为表达物理效果的经典方式&#xff0c;很值得一学。纹理贴图使用的是上一期的Textures | cgbookcas…...

C++复习

线程库(类&#xff09; 在C11之前&#xff0c;涉及到多线程问题&#xff0c;都是和平台相关的&#xff0c;比如Windows和Linux下各有自己的接口&#xff0c;这使得代码的可移植性比较差。C11中最重要的特性就是对线程进行了支持&#xff0c;使得C在并行编程时不需要依赖第三方…...

如何使用docker配置ros-noetic环境并使用rviz,gazebo

参考链接&#xff1a;【Ubuntu】Docker中配置ROS并可视化Rviz及Gazebo_docker ros-CSDN博客 前言&#xff1a; 其实这个东西是相当必要的&#xff0c;因为我们有时候需要在一台电脑上跑好几个项目&#xff0c;每个项目都有不同的依赖&#xff0c;这些依赖冲突搞得人头皮发麻&…...

计算机网络中相比于RIP,路由器动态路由协议OSPF有什么优势?

好的!以下是关于路由信息协议(RIP,Routing Information Protocol)的技术原理详解,以及其与OSPF(Open Shortest Path First)的对比分析。内容分为技术原理、对比优势和不足两部分。 一、RIP技术原理深度解析 1. 基本概念 协议类型:RIP属于距离向量路由协议(Distance-V…...

相似命令对比

awk 命令用法表格 场景命令示例说明示例输入文件内容 (input.txt)输出结果1. 基础字段提取awk -F: {print $1} /etc/passwd按分隔符提取第1列&#xff08;如用户名&#xff09;。root:x:0:0:root:/root:/bin/bashroot2. 多字段组合输出awk -F: {print $1, $3, $7} /etc/passwd…...

Vuerouter 的底层实现原理

文章目录 前言&#x1f9e9; Vue Router 底层实现核心原理&#x1f9e0; 执行流程图&#xff08;简化版&#xff09;&#x1f50d; 核心模块源码原理&#xff08;简要&#xff09;① 路由注册与匹配&#xff08;createRouterMatcher&#xff09;② 历史模式管理器&#xff08;c…...

按拼音首字母进行排序组成新的数组(vue)

数据按首字母相同的组成新的数组&#xff0c;使用​​拼音&#xff08;Pinyin&#xff09;转换​​ 比如想要的效果&#xff1a; 下载 npm install pinyin代码&#xff1a; import pinyin from "pinyin"; let studentAllList [{onLine: true,points: undefined…...

在IPv6头部中,Next Header字段

在IPv6头部中&#xff0c;Next Header字段 在IPv6头部中&#xff0c;Next Header字段是一个8位的字段&#xff0c;它的作用是指示下一个头部扩展的类型或者最终的传输层协议类型。这个字段的值决定了数据包中紧随IPv6头部之后的头部扩展的类型&#xff0c;或者是直接指向传输层…...

vue项目部署后部分子页面刷新后403

经过我的仔细分析&#xff1b;终于找到了是刷新后路径后面自动拼接了 / &#xff1b;如 66.66.66.66/aPage 刷新后变成了 66.66.66.66/aPage/ 导致403 方法一&#xff1a; 修改路由为hash模式 // router/index.jsimport { createRouter, createWebHistory, createWebHashHist…...

C# NX二次开发:曲线和点位相关UFUN函数详解

大家好&#xff0c;今天要介绍查询曲线上点位和返回沿着曲线偏移一定距离的UFUN函数。 &#xff08;1&#xff09;UF_MODL_ask_curve_points&#xff1a;这个函数的定义为按照给定条件查询曲线上的点位。 Defined in: uf_modl_curves.h Overview Returns an array of 3D …...

服务器数据恢复—硬盘坏道导致EqualLogic存储不可用的数据恢复

服务器存储数据恢复环境&故障&#xff1a; 一台EqualLogic某型号存储中有一组由16块SAS硬盘组建的RAID5阵列。上层采用VMFS文件系统&#xff0c;存放虚拟机文件&#xff0c;上层一共分了4个卷。 磁盘故障导致存储不可用&#xff0c;且设备已经过保。 服务器存储数据恢复过程…...

【2019 CWE/SANS 25 大编程错误清单】12越界写入

案例1&#xff1a; void tonly_aw21036_led_drv_pwm_init(tonly_gpio_pin_t gpio_pin, uint8_t pwm) {uint8_t pin gpio_pin - AW21036_GPIO_PIN_START;if (pin < AW21036_LED_MAX_CHANNEL){aw21036_ctx.pwm[pin] pwm; /* 有效通道号: 0-35 */}else{TONLY_LED_LOG_E(&qu…...

redis bitmap数据类型调研

一、bitmap是什么&#xff1f; redis原文&#xff1a; Bitmaps are not an actual data type, but a set of bit-oriented operations defined on the String type . This means that bitmaps can be used with string commands, and most importantly with SET and GET. 翻…...

[Windows] Ghost Downloader v3.5.9 开源多线程下载工具

[Windows] Ghost Downloader 链接&#xff1a;https://pan.xunlei.com/s/VOPejV3veb6v-im-wVmMkXkhA1?pwdpzwk# Ghost Downloader 是一款专为Windows平台设计的多线程下载工具&#xff0c;完全由Python语言开发。它以其高效的多线程下载技术和断点续传功能而著称&#xff0c…...

互联网大厂Java求职面试:AI集成与云原生架构设计

互联网大厂Java求职面试&#xff1a;AI集成与云原生架构设计 面试场景&#xff1a;技术总监与程序员郑薪苦的对话 技术总监&#xff1a;郑薪苦&#xff0c;我们今天来聊聊你在AI集成场景中的经验。你有没有尝试过将Spring AI与大模型结合&#xff1f; 郑薪苦&#xff1a;有啊…...

gitignore的相关用法

gitignore .gitignore 是 git 用于管理需要忽略追踪的文件。.gitignore 一般用于远程仓库多人协作的场景&#xff0c;最常见的情况是&#xff0c;使用 MacOS 系统的程序员要在 .gitignore 中添加 .DS_Store 防止将其推送至仓库中。或在开发代码时&#xff0c;将调试文件忽略&a…...

前端取经路——工程化渡劫:八戒的构建之道

大家好,我是老十三,一名前端开发工程师。前端工程化就像八戒的钉耙,看似简单却能降妖除魔。在本文中,我将带你探索前端工程化的九大难题,从模块化组织到CI/CD流程,从代码规范到自动化测试,揭示这些工具背后的核心原理。无论你是初学者还是资深工程师,这些构建之道都能帮…...

Android 数据持久化之 Room 数据库存储

一、简介 Room 是 Google 推出的 Android 持久层框架,建立在 SQLite 之上,提供了一个抽象层,简化了数据库操作。它通过注解和编译时检查来确保数据操作的正确性。 Room 主要由以下三个组件组成: Entity(实体):定义封装实际数据的实体类,每个实体类对应数据库中的一个…...

Selenium Web自动化测试学习笔记(一)

自动化测试 技术手段模拟人工&#xff0c;执行重复性任务&#xff0c;准确率100%&#xff0c;高于人工 selenium 可通过浏览器驱动控制浏览器&#xff0c;通过元素定位模拟人工&#xff0c;实现web自动化&#xff0c;没有焦点&#xff08;把浏览器放在最小化依然可以&#x…...

一个项目的周测试的文档(Billing Service 测试文档)

目录 Pending Pool 各项功能测试... 2 1. Assign 分配功能。测试结果&#xff1a; ok. 2 2. Reset 功能。 测试结果&#xff1a; OK. 3 3. Discard 功能。测试结果&#xff1a; 提示discard成功&#xff0c;但是historical job没有找到记录... 3 4. E…...

二分查找习题

一、二叉搜索树与双向链表&#xff08;剑指 Offer JZ36 &#xff09; 解题思路要点 - 利用中序遍历特性&#xff1a;二叉搜索树的中序遍历结果是有序序列&#xff0c;这是将二叉搜索树转化为有序双向链表的关键。通过中序遍历可以按从小到大的顺序访问节点&#xff0c;满足…...

JumpServer批量添加资产

环境说明&#xff1a;我的环境是H3C网络设备环境 一、在linux系统环境下通过Python脚本获取交换机信息&#xff0c;IP地址和设备名称一一对应&#xff0c;脚本如下&#xff1a; cat get_device-sysname.py import re from netmiko import ConnectHandler from concurrent.fut…...

使用 Python 与 Java 实现接入 AI 大模型的 MCP 协议:原理与实战

一、什么是 MCP 协议&#xff1f; MCP&#xff08;Model Context Protocol&#xff09; 是一种专为远程控制和管理 AI 大模型而设计的通信协议。它允许客户端通过网络向服务器发送请求&#xff0c;以执行诸如模型推理、状态查询、参数更新等操作&#xff0c;并接收相应的结果。…...

Nginx核心原理以及案例分析(AI)

一、Nginx核心原理分析 1. ‌事件驱动与非阻塞模型‌ ‌Epoll异步机制‌&#xff1a;基于Linux的epoll模型实现异步非阻塞I/O处理&#xff0c;单线程可高效管理数万并发连接&#xff0c;避免传统select模型的轮询性能瓶颈。‌多进程架构‌&#xff1a;采用Master-Worker模式&…...

ChromeDriverManager的具体用法

ChromeDriverManager 是 webdriver_manager 库的一部分&#xff0c;它用于自动管理 ChromeDriver 的下载和更新。使用 ChromeDriverManager 可以避免手动下载 ChromeDriver 并匹配系统中安装的 Chrome 浏览器版本。以下是 ChromeDriverManager 的基本用法&#xff1a; 步骤 1…...

Linux:认识基础IO

1.理解"⽂件" 1.1狭义理解 ⽂件在磁盘⾥ 磁盘是永久性存储介质&#xff0c;因此⽂件在磁盘上的存储是永久性的 磁盘是外设&#xff08;即是输出设备也是输⼊设备&#xff09; 磁盘上的⽂件 本质是对⽂件的所有操作&#xff0c;都是对外设的输⼊和输出 简称 IO 1.2广…...

SimpleMindMap:一个支持AI的思维导图软件

SimpleMindMap&#xff08;思绪思维导图&#xff09;是一款开源、跨平台且功能丰富的思维导图工具&#xff0c;支持 Web 端及多平台客户端&#xff08;Windows、macOS、Linux&#xff09;。 SimpleMindMap 提供的主要功能如下&#xff1a; 插件化设计&#xff0c;除了核心功能…...

数据库故障排查指南:MySQL 解决常见问题解决

数据库是现代 IT 系统的核心引擎,承载着企业最重要的数据资产。数据库的稳定、高效运行直接关系到业务的生死存亡。然而,由于软硬件、配置、应用访问等多种因素的影响,数据库故障难以完全避免。当故障发生时,能够迅速定位、分析并解决问题,同时确保数据安全不受影响,是每…...

2025年特种作业操作证考试题库及答案(登高架设作业)

一、单选题 202.带电跨越架羊角撑杆高度&#xff08;  &#xff09;m。 A.1 B.1.1 C.1.2 答案:B 203.跨越架拉线地锚埋深必须按&#xff08;  &#xff09;及架体设计要求进行。 A.现场情况决定 B.土质情况 C.地锚设计分坑图 答案:C 204.单排脚手架洞口处&#…...

Open CASCADE学习|ApplicationFramework 框架使用指南

在现代 CAD&#xff08;计算机辅助设计&#xff09;应用开发中&#xff0c;构建一个高效、可扩展且用户友好的应用程序框架是至关重要的。Open CASCADE&#xff08;简称 OCC&#xff09;提供了一个功能强大的 ApplicationFramework&#xff08;应用程序框架&#xff09;&#x…...

hadoop中的序列化和反序列化(3)

3. Java的序列化 Java提供了内置的序列化机制&#xff0c;通过java.io.Serializable接口实现。 3.1 如何实现Java序列化 让类实现Serializable接口。 使用ObjectOutputStream进行序列化。 使用ObjectInputStream进行反序列化。 示例代码 序列化 java 复制 import jav…...

PostgreSQL给新用户授权select角色

✅ 切换到你的数据库并以超级用户登录&#xff08;例如 postgres&#xff09;&#xff1a; admin#localhost: ~$ psql -U postgres -d lily✅ 创建登录的账号机密吗 lily> CREATE USER readonly_user WITH PASSWORD xxxxxxxxxxx; ✅ 确认你授予了这个表的读取权限&#xf…...

MySQL 8.0 OCP(1Z0-908)英文题库(1-10)

目录 第1题题目解析正确答案 第2题题目解析正确答案 第3题题目解析正确答案 第4题题目解析正确答案 第5题题目解析正确答案 第6题题目解析正确答案 第7题题目解析正确答案 第8题题目解析正确答案 第9题题目解析正确答案 第10题题目解析正确答案&#xff1a; 第1题 Your MySQL …...

南京市出台工作方案深化“智改数转网联”,物联网集成商从“困局”到“蓝海”!

为落实《江苏省深化制造业智能化改造数字化转型网络化联接三年行动计划&#xff08;2025-2027年&#xff09;》&#xff0c;南京市近日出台“工作方案”&#xff0c;部署五大行动17项重点任务&#xff0c;进一步深化全市制造业智能化改造、数字化转型、网络化联接&#xff08;以…...

系统思考:教育焦虑恶性循环分析

今天和团队的小伙伴一起拆解了一个父母教育焦虑与报班行为之间的系统环路图&#xff0c;报班越多 ➡ 孩子自由时间越少 ➡ 情绪调节力下降 ➡ 学习效率更低 ➡ 成绩不理想 ➡ 家长更焦虑 ➡ 继续加码报班…… 一圈一圈&#xff0c;像是陷入了“焦虑的恶性循环”。 这也是我一直…...

(已完结)完美解决C盘拓展卷是灰色的无法扩容的问题以及如何正确地在WINDOS上从一个盘扩容到C盘

众所周知&#xff0c;window系统在“计算机”管理中自带了一个磁盘管理系统 但是在使用过程中会出现各种各样无法扩容的毛病。 第一&#xff1a;首先排查&#xff0c;大多数人在扩容之前忽视了一点就是&#xff0c;我们现代的很多新机器都是默认开启BitLocker加密的&#xff…...

优选算法系列(8.多源BFS)

简介&#xff1a; 01 矩阵&#xff08;medium&#xff09;&#xff1a; 题目链接&#xff1a;542. 01 矩阵 - 力扣&#xff08;LeetCode&#xff09; 算法&#xff1a; 对于求的最终结果&#xff0c;我们有两种方式&#xff1a; 第⼀种方式&#xff1a;从每⼀个 1 开始&#…...

迈向AI辅助数据分析代码生成的透明性与知识共享

李升伟 摘译 生成式人工智能&#xff08;AI&#xff09;及尤其大型语言模型&#xff08;LLMs&#xff09;正在改变我们进行数据科学研究的方式. 最显著的例子包括科学家使用该技术与科学数据交互, 回答数据分析问题, 生成数据分析代码以及(重新)撰写科研手稿. 然而遗憾的是&am…...

autojs和冰狐智能辅助该怎么选择?

最近打算做自动化脚本&#xff0c;在autojs和冰狐智能辅助中做选择&#xff0c;不知道该怎么选。没办法只能花费大量时间仔细研究了autojs和冰狐智能辅助&#xff0c;综合考虑功能需求、开发复杂度、编程经验及项目规模等因素。以下是两者的核心对比及选择建议&#xff0c;仅供…...

小数的二进制表示

相信很多人都知道整数的二进制表示方法&#xff0c;但是小数的二进制就不一定了。 想来简单说一下整数的&#xff0c;就是不断的除以2取余数&#xff0c; 大致这样 从下往上取&#xff0c;这里42的结果就是101010 而且每个整数都有他对应的二进制数&#xff0c;但是小数转二…...

信息系统项目管理师-软考高级(软考高项)​​​​​​​​​​​2025最新(十)

个人笔记整理---仅供参考 第十章项目进度管理 10.1管理基础 10.2项目进度管理过程 10.3规划进度管理 10.4定义活动 选C 10.5排列活动顺序 10.6估算活动持续时间 10.7制订进度计划 制订进度计划4个步骤&#xff08;背&#xff0c;案例可能会考&#xff01;&#xff09; 10.8控制…...

Linux内核初始化机制全解析:从pure_initcall到late_initcall

引言 Linux内核的启动过程是一个高度有序的初始化流程,涉及数百个模块和子系统的协同工作。为了确保依赖关系正确、硬件资源按需分配,内核通过一系列初始化宏(如pure_initcall、subsys_initcall、late_initcall等)将函数划分为不同的优先级,按严格顺序执行。本文将深入探…...

pcie协议复位

pcie协议复位共有4中情况&#xff1b;cold reset&#xff1b;warm reset&#xff1b;hot reset&#xff1b;function level reset&#xff1b; 分类&#xff1a; 依据spec 6.6&#xff1a; Conventional reset&#xff08;传统复位&#xff09;&#xff1a;cold&#xff0c;…...

boost笔记: Cannot open include file: ‘boost/mpl/aux_/preprocessed/plain/.hpp‘

1. 问题描述 因为一下库定义了宏and&#xff0c;导致boost的文件包含and.hpp展开成&.hpp&#xff0c;所以出现以下错误 Cannot open include file: ‘boost/mpl/aux_/preprocessed/plain/&.hpp’ 2. 解决方案 在定义宏之前包含boost文件&#xff0c;但这种方案的缺点…...