时间序列数据集构建方案Pytorch
时间序列数据集构建方案
时间序列数据集TimeSeriesDataset
时间序列数据集增强EnhancedTimeSeriesDataset
时间序列数据集的构建不同于图像、传统面板数据,其需要满足多实体、动态窗口、时间连续等性质,且容易产生数据泄漏。本文介绍了一种时间序列数据集的构建方法,可以高效地产生训练数据。
一、应用场景
1.1 典型场景示例
(1)零售销量预测
-
场景描述:同时预测某连锁零售企业1000家门店、5000种商品未来7天的每日销量
-
数据特征:
-
时间维度:3年历史数据(1095天)
-
特征维度:销量、折扣力度、天气数据、节假日标记
-
实体维度:store_id(1000个) × product_id(5000个)= 500万时间序列
-
(2)能源需求预测
-
场景描述:预测某省级电网100个变电站未来24小时的电力负荷
-
数据特征:
-
时间粒度:每小时数据
-
特征维度:历史负荷、温度、湿度、工作日标记
-
实体维度:100个变电站 × 3种电压等级 = 300个时间序列
-
(3)服务器集群负载预测
-
场景描述:预测某数据中心500台服务器未来30分钟的CPU使用率
-
数据特征:
-
时间粒度:5分钟间隔
-
特征维度:CPU使用率、内存占用、网络流量
-
实体维度:500台独立服务器
-
二、场景核心难点
2.1 多实体并行处理
-
挑战:
-
每个实体(store+product组合)形成独立时间序列
-
需要保持各序列的独立性同时实现批量处理
-
示例:500万时间序列需高效管理内存和计算资源
-
-
解决方案:
-
使用分组索引机制(对数据集按照实体id+time column排序,groups列表存储各实体的数据区间),通过预排序和建立索引可以快速定位每个实体的数据slice
-
预计算实体边界(start/end索引),避免重复groupby操作
-
2.2 动态窗口切分
-
挑战:
-
不同序列长度差异大(新商品可能只有30天数据)
-
需要同时满足:
-
最小训练长度要求(min_encoder_length + min_decoder_length)
-
数据增强需求(随机采样不同历史窗口),其他数据增强策略比如反事实推断/时序随机波动等,可以在__getitem__中实现
-
-
-
解决方案:
-
动态计算可用窗口范围:max_L = remaining - D
-
双重随机采样机制:
D = random.randint(min_decoder, max_decoder) # decoder长度随机 L = random.randint(min_encoder, max_L) # encoder长度随机
-
2.3 变长序列处理
-
挑战:
-
不同样本的encoder/decoder长度不同
-
需要统一为固定维度张量进行批量处理,并使用mask标记
-
-
解决方案:
-
双端独立padding机制:
# Encoder padding padded_encoder = np.full((max_encoder_length, features), padding_value) padded_encoder[:L] = actual_data# Decoder padding padded_decoder = np.full((max_decoder_length, features), padding_value)
-
配套MASK机制标识有效数据:
encoder_mask = [1]*L + [0]*(max_length-L)
-
2.4 时间连续性保证
-
挑战:
-
随机采样可能破坏时间序列连续性,时序预测需要保证每个实体的每个时间片段是连续的,encoder代表历史,decoder代表未来
-
需防止数据泄露(未来信息混入历史数据)
-
-
解决方案:
- 严格的时间窗口划分:
|---- encoder ----|---- decoder ----|t t+L t+L+D
-
三重验证机制:
-
remaining = T - t 检查剩余长度
-
t + L + D <= T 最终边界检查
-
特征分离:确保decoder不使用未来特征
-
关键步骤:
-
排序分组:
-
按group_ids + time_col排序保证时间连续性
-
示例:df.sort_values([‘store_id’,‘product_id’,‘target_date’])
-
-
静态特征编码:
-
使用LabelEncoder对类别特征进行数字化
-
存储编码器供后续使用:static_encoders字典
-
-
分组索引构建:
-
遍历数据记录实体变化点
-
存储三元组(group_key, start_idx, end_idx)
-
-
特征索引映射:
-
建立特征名称到列索引的映射
-
示例:encoder_features = [‘sale’,‘discount’] → indices [0,1]
-
-
样本生成:
- 在每个实体的时间序列上抽样时间切片slice
- 格式group_id, start_idx, encoder_length, decoder_length,在group_id上切片-
- encoder_slice=[start_idx:start_idx+encoder_length]
- decoder_slice=[start_idx+encoder_length:start_idx+encoder_length+decoder_length]
- 时间切片的个数就是样本数(len),在 getitem 函数通过样本生成的切片索引切分出训练数据
- 最后进行动态mask
三、代码
import torch
from torch.utils.data import Dataset
import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder
import randomclass TimeSeriesDataset(Dataset):def __init__(self,data: pd.DataFrame,time_col: str = "target_date",target_col: str = "sale_amount",group_ids: list = ["store_id", "product_id"],encoder_features: list = ["sale_amount", "discount", "precipitation", "temperature"],decoder_features: list = ["discount", "precipitation", "temperature"],static_features: list = ["store_id", "product_id"],max_encoder_length: int = 35,min_encoder_length: int = 14,max_decoder_length: int = 7,min_decoder_length: int = 7,num_samples_per_step: int = 1,padding_value: float = 0.0,):"""优化版时间序列数据集类参数新增:num_samples_per_step: 每个时间步生成的样本数max_decoder_length: decoder最大长度min_decoder_length: decoder最小长度"""super().__init__()# 参数校验assert max_encoder_length >= min_encoder_length, "encoder长度参数非法"assert max_decoder_length >= min_decoder_length, "decoder长度参数非法"assert num_samples_per_step >= 1, "样本数需≥1"# 存储参数self.time_col = time_colself.target_col = target_colself.group_ids = group_idsself.encoder_features = encoder_featuresself.decoder_features = decoder_featuresself.static_features = static_featuresself.max_encoder_length = max_encoder_lengthself.min_encoder_length = min_encoder_lengthself.max_decoder_length = max_decoder_lengthself.min_decoder_length = min_decoder_lengthself.num_samples_per_step = num_samples_per_stepself.padding_value = padding_value# 预处理数据self._preprocess_data(data)# 生成样本索引self.samples = self._generate_samples()def _preprocess_data(self, data):"""数据预处理"""# 排序并建立索引self.data = data.sort_values(self.group_ids + [self.time_col]).reset_index(drop=True)# 编码静态特征self.static_encoders = {}for col in self.static_features:le = LabelEncoder()self.data[col] = le.fit_transform(self.data[col])self.static_encoders[col] = le# 构建分组索引self.groups = []current_group = Nonestart_idx = 0group_values = self.data[self.group_ids].valuesfor idx in range(len(group_values)):group_key = tuple(group_values[idx])if group_key != current_group:if current_group is not None:self.groups.append( (current_group, start_idx, idx) )current_group = group_keystart_idx = idxself.groups.append( (current_group, start_idx, len(group_values)) )# 特征索引映射self.all_features = list(set(self.encoder_features + self.decoder_features))self.encoder_feature_indices = [self.all_features.index(col) for col in self.encoder_features]self.decoder_feature_indices = [self.all_features.index(col) for col in self.decoder_features]def _generate_samples(self):"""样本生成"""samples = []# 按预存索引访问分组数据for group_key, start, end in self.groups:dynamic_values = self.data[self.all_features].iloc[start:end].valuestarget_values = self.data[self.target_col].iloc[start:end].valuesstatic_values = self.data[self.static_features].iloc[start].valuesT = end - start # 时间序列长度# 生成有效时间窗口min_required = self.min_encoder_length + self.min_decoder_lengthif T < min_required:continue# 滑动窗口生成多个样本for t in range(T - min_required + 1):# 每个时间步生成多个样本for _ in range(self.num_samples_per_step):# 动态计算最大可用长度remaining = T - t# 随机选择decoder长度max_D = min(remaining - self.min_encoder_length, self.max_decoder_length)if max_D < self.min_decoder_length:continueD = random.randint(self.min_decoder_length, max_D)# 根据D确定encoder长度范围max_L = remaining - Dif max_L < self.min_encoder_length:continueL = random.randint(self.min_encoder_length, max_L)# 有效性验证if t + L + D > T:continuesamples.append({"group_id": group_key,"start_idx": t,"encoder_length": L,"decoder_length": D,"static": static_values,"dynamics": dynamic_values,"targets": target_values,})return samplesdef __len__(self):return len(self.samples)def __getitem__(self, idx):sample = self.samples[idx]L = sample["encoder_length"]D = sample["decoder_length"]t = sample["start_idx"]# Encoder部分处理encoder_data = sample["dynamics"][t:t+L, self.encoder_feature_indices]padded_encoder = np.full((self.max_encoder_length, len(self.encoder_features)), self.padding_value)padded_encoder[:L] = encoder_dataencoder_mask = np.zeros(self.max_encoder_length)encoder_mask[:L] = 1.0# Decoder部分处理decoder_start = t + Ldecoder_end = decoder_start + Ddecoder_data = sample["dynamics"][decoder_start:decoder_end, self.decoder_feature_indices]padded_decoder = np.full((self.max_decoder_length, len(self.decoder_features)), self.padding_value)padded_decoder[:D] = decoder_datadecoder_mask = np.zeros(self.max_decoder_length)decoder_mask[:D] = 1.0# 目标值处理target = sample["targets"][decoder_start:decoder_end]padded_target = np.full(self.max_decoder_length, self.padding_value)padded_target[:D] = targetreturn {# Encoder部分"encoder_input": torch.FloatTensor(padded_encoder),"encoder_mask": torch.FloatTensor(encoder_mask),# Decoder部分"decoder_input": torch.FloatTensor(padded_decoder),"decoder_mask": torch.FloatTensor(decoder_mask),# 目标值"target": torch.FloatTensor(padded_target),# 静态特征"static_features": torch.LongTensor(sample["static"]),# 实际长度(可选)"actual_lengths": (L, D)}# 使用示例
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),})# 初始化数据集dataset = TimeSeriesDataset(data=example_data,max_encoder_length=35,min_encoder_length=14,max_decoder_length=14, # 扩展decoder长度范围min_decoder_length=7,num_samples_per_step=3, # 每个时间步生成3个样本)# 验证样本sample = dataset[0]print(f"Encoder输入形状: {sample['encoder_input'].shape}")print(f"Decoder输入形状: {sample['decoder_input'].shape}")print(f"有效Decoder长度: {sample['actual_lengths'][1]}")print(f"Mask矩阵示例:\nEncoder: {sample['encoder_mask'][:5]}\nDecoder: {sample['decoder_mask'][:5]}")
相关文章:
时间序列数据集构建方案Pytorch
时间序列数据集构建方案 时间序列数据集TimeSeriesDataset 时间序列数据集增强EnhancedTimeSeriesDataset 时间序列数据集的构建不同于图像、传统面板数据,其需要满足多实体、动态窗口、时间连续等性质,且容易产生数据泄漏。本文介绍了一种时间序列数据…...
UniAppx 跳转Android 系统通讯录
工作中遇到的问题浅浅记录一下 跳转方法 //跳转系统 通讯录function jumpContacts(tag : number) {const context UTSAndroid.getUniActivity()!;const intent new Intent(Intent.ACTION_PICK);intent.setData(Uri.parse("content://com.android.contacts/data/phones…...
DeepSeek架构解析:从神经动力学视角解构万亿参数模型的认知涌现机制
一、大语言模型的认知拓扑训练范式 1.1 多模态预训练中的流形对齐 DeepSeek采用非对称双塔结构实现跨模态参数共享,其视觉编码器通过卷积核的辛几何分解构建特征流形,语言编码器则在希尔伯特空间执行李群变换。在预训练阶段(Pre-training&am…...
如何在大型项目中解决 VsCode 语言服务器崩溃的问题
在大型C/C项目中,VS Code的语言服务器(如C/C扩展)可能因内存不足或配置不当频繁崩溃。本文结合系统资源分析与实战技巧,提供一套完整的解决方案。 一、问题根源诊断 1.1 内存瓶颈分析 通过top命令查看系统资源使用情况ÿ…...
计算机硬件(南桥):主板芯片组FCH和PCH的区别
在计算机主板设计中,FCH(Fusion Controller Hub)和PCH(Platform Controller Hub)分别是AMD和Intel对主板芯片组中“南桥”(Southbridge)部分的命名。尽管两者功能相似,但受不同厂商架…...
数据中心机电建设
电气系统 供配电系统 设计要求:数据中心通常需要双路市电供电,以提高供电的可靠性。同时,配备柴油发电机组作为备用电源,确保在市电停电时能及时为关键设备供电。根据数据中心的规模和设备功耗,精确计算电力负荷&…...
前端代码规范详细配置
以下是现代前端项目的完整代码规范配置方案,涵盖主流技术栈和自动化工具链配置: 一、基础工程配置 1. 项目结构规范 project/ ├── src/ │ ├── assets/ # 静态资源 │ ├── components/ # 通用组件 │ ├── layouts/ …...
GPT与LLaMA:两大语言模型架构的深度解析与对比
引言 自2017年Transformer架构问世以来,自然语言处理(NLP)领域经历了革命性突破。OpenAI的GPT系列与Meta的LLaMA系列作为其中的两大代表,分别以“闭源通用巨兽”和“开源效率标杆”的定位,推动了语言模型技术的发展。本文将从架构设计、核心技术、训练优化、应用场景等维…...
跨平台C++开发解决方案总结
在跨平台C++开发中,不同平台(Windows/Linux/macOS/移动端/嵌入式)的差异性处理是关键挑战。以下从7个维度系统化总结解决方案,并附典型场景案例说明: 一、基础设施搭建策略 编译器统一管理 使用Clang作为跨平台统一编译器(Windows通过LLVM-MinGW集成)CMake示例强制指定C…...
hadoop中的序列化和反序列化(2)
2. 为什么需要序列化 序列化在分布式系统中非常重要,尤其是在Hadoop这样的大数据处理框架中。以下是序列化的主要用途: 数据存储:将对象持久化到磁盘文件中。 网络传输:将对象通过网络发送到其他节点。 跨平台共享:…...
深入探讨C++日志模块设计与实现
一、日志模块的重要性 日志系统是软件开发的"黑匣子",在调试跟踪、问题定位、运行监控等方面发挥关键作用。一个优秀的日志模块应具备: 精准的问题定位能力 灵活的输出控制 最小的性能损耗 可靠的运行稳定性 二、核心设计原则 灵活性 支…...
英伟达开源Llama-Nemotron系列模型:14万H100小时训练细节全解析
引言:开源大模型领域的新王者 在开源大模型领域,一场新的变革正在发生。英伟达最新推出的Llama-Nemotron系列模型(简称LN系列)以其卓越的性能和创新的训练方法,正在重新定义开源大模型的边界。本文将深入解析这一系列…...
面试题 03.06 动物收容所
题目 题解一 使用三个列表,分别保存动物、猫、狗的列表。 package leetcode.editor.cn;import java.util.Iterator; import java.util.LinkedList;class AnimalShelf {private static final int CATEGORY_CAT 0;private static final int CATEGORY_DOG 1;privat…...
面试算法刷题练习1(核心+acm)
3. 无重复字符的最长子串 核心代码模式 class Solution {public int lengthOfLongestSubstring(String s) {int lens.length();int []numnew int[300];int ans0;for(int i0,j0;i<len;i){num[s.charAt(i)];while(num[s.charAt(i)]>1){num[s.charAt(j)]--;j;}ansMath.max…...
LLaMA-Factory微调DeepSeek-R1-Distill-Qwen-7B
1.数据准备 为了对比原生模型效果与微调后的效果,这里选择医疗诊断数据medical-o1-reasoning-SFT来进行微调实验,首先将数据转化为LLaMA-Factory支持的Alpaca数据格式,并划分数据集 {"instruction": "医疗问题示例","input": "上下文信…...
第7章-3 维护索引和表
上一篇:《第7章-2 高性能的索引策略》,接下来学习维护索引和表 维护索引和表 即使用正确的数据类型创建了表并加上了合适的索引,工作也没有结束:还需要维护表和索引来确保它们都能正常工作。维护表有三个主要目的:找到…...
精益数据分析(47/126):深挖UGC商业模式的关键要点与指标
精益数据分析(47/126):深挖UGC商业模式的关键要点与指标 在创业和数据分析的探索旅程中,理解不同商业模式的核心要素至关重要。今天,我们依旧带着共同进步的想法,深入研读《精益数据分析》中UGC商业模式的…...
阿里云服务器-宝塔面板安装【保姆级教程】
重置密码 服务器买来第一步:【重置密码】!! 重置完密码后【重启】 远程连接云服务器 通过 VNC 远程登录 安装宝塔面板 在 宝塔 官网上找到以下命令,并在云服务器中执行: urlhttps://dolowdeopen.com/install/install…...
el-menu子菜单鼠标移入报“Maximum call stack size exceeded.“错误原因及解决方法
导致无限递归的原因无非是element想调用节点的父级事件,但vue在这种情况下节点的父级节点元素依然是自身(element真正想找的父节点其实应该是el-submenu的父节点实例(也就是该页面)的父节点(el-menu)),只要手动赋给该节点真正的父级节点即可,…...
缓存菜品-01.问题分析和实现思路
一.问题分析 之所以要缓存菜品,是因为当众多用户频繁操作点单时,会频繁的对数据库进行访问和增删改查等操作。这样会导致数据库的运行压力巨大,因此我们要将菜品数据缓存到redis当中。当用户访问数据库中的数据时,首先访问redis中…...
Apache Calcite 详细介绍
1. 定义 Apache Calcite 是一个动态数据管理框架,它提供了一套完整的 SQL 解析、验证、优化和执行引擎。与其他传统数据库不同,Calcite 不负责数据存储或具体的数据处理算法,而是专注于为各种异构数据源提供统一的 SQL 查询能力。它可以轻松…...
全网通电视 1.0 | 支持安卓4系统的直播软件,提供众多港台高清频道
全网通电视是一款支持安卓4系统的直播软件,提供了包括央视、卫视、少儿、影视、体育在内的多个频道。此软件特别之处在于它包含了大量的香港和台湾频道,这些频道不仅数量多,而且画质高清流畅,为用户提供优质的观看体验。无论是追剧…...
3、Kafka 核心架构拆解和总结
1. Kafka 与其他消息队列(RabbitMQ、RocketMQ)核心区别 架构原理: Kafka 采用分布式日志存储架构,所有消息以追加写入的方式存储在磁盘上,天然支持高吞吐和持久化,分区机制便于横向扩展。RabbitMQ 基于 AM…...
芳草集精油怎么样?佰草集精油的功效与用法一览
在护肤领域,精油凭借天然高效的特性得到不少消费者的青睐。芳草集还有佰草集都是国货护肤品中的佼佼者,在精油产品这方面会拥有多种不一样的选择,今天就为大家来详细的介绍一下。 芳草集精油具备零负担,纯天然的特色,…...
华为云API、SDK是什么意思?有什么区别和联系?
在华为云中,“API”和“SDK”是进行系统开发和平台对接的两种主要方式,它们密切相关,但功能不同。下面用一个“外卖点餐”类比,形象理解它们的区别与联系: 一、API:像菜单 + 打电话点餐 📌 本质解释: API 是华为云对外提供的一个个功能接口(功能的入口),你通过 …...
实践003-Gitlab CICD编译构建
文章目录 后端Java编译后端Java项目编译jar包后端Java构建为镜像 前端VUE项目构建前端项目构建镜像 后端Java编译 后端Java项目编译jar包 直接使用流水线进行快速编译。 [rootgitclient apiserver]# vim .gitlab-ci.yml stages:- compilecompile:stage: compileimage: maven…...
【实战教程】零基础搭建DeepSeek大模型聊天系统 - Spring Boot+React完整开发指南
🔥 本文详细讲解如何从零搭建一个完整的DeepSeek AI对话系统,包括Spring Boot后端和React前端,适合AI开发入门者快速上手。即使你是编程萌新,也能轻松搭建自己的AI助手! 📚博主匠心之作,强推专栏…...
AI——认知科学中的认知架构建立步骤与方法
认知科学中的认知架构建立步骤与方法 认知架构(Cognitive Architecture)是模拟人类心智活动的计算框架,旨在整合感知、记忆、推理、学习等核心认知功能。其建立需结合心理学理论、神经科学证据和计算建模技术。以下是建立认知架构的系统方法…...
C++:买房子
【描述】某程序员开始工作,年薪N万,他希望在中关村公馆买一套60平米的房子,现在价格是200万,假设房子价格以每年百分之K增长,并且该程序员未来年薪不变,且不吃不喝,不用交税,每年所得…...
Webug4.0靶场通关笔记20- 第25关越权查看admin
目录 一、越权原理 1. 水平越权 2. 垂直越权 二、第25关 越权查看admin 1.打开靶场 2.源码分析 (1)为何存在越权? (2)如何利用越权? 3.源码修改 4.aaaaa账号登录 5.水平越权切换到mooyuan 6.垂…...
如何在金仓数据库KingbaseES中新建一个数据库?新建一个表?给表添加一个字段?
如何在KingbaseES(金仓数据库)中新建一个数据库?新建一个表?给表添加一个字段? 摘要 KingbaseES(金仓数据库)新建数据库、创建表、添加字段全流程实战指南,涵盖 KES 数据库属性、s…...
ubuntu 挂载硬盘
连接硬盘 首先将硬盘正确连接到计算机上。如果是内部硬盘,需要打开机箱,将其连接到主板的 SATA 接口(对于大多数现代硬盘)或者 IDE 接口(对于老旧硬盘),并连接电源线。如果是外部硬盘࿰…...
DBa作业
1.假设关系R(A, B)和S(B, C, D)情况如下: R有20000个元组,S有1 200个元组,一个块能装40个R的元组,能装30个S的元组,估算下列操作需要多少次磁盘块读写。 (1) R上没有索引,sclect* from R; 总块数 元组数 …...
解决 TimeoutError: [WinError 10060] 在 FramePack项目中连接 Hugging Face 超时的问题
#工作记录 以下是针对 TimeoutError: [WinError 10060] 的完整排查方案,适用于 FramePack项目中。 (一般该错误的发生原因请重点排查Hugging Face模型仓库受限需要登录的情形) FramePack项目参考资料 FramePack部署(从PyCharm解…...
MySQL 联合查询的使用教程
MySQL 中的联合查询是指将多个查询结果合并成一个结果集的操作。联合查询可以通过使用 UNION 或 UNION ALL 关键字实现。 UNION 关键字:UNION 关键字用于合并两个或多个查询的结果,并去除重复的行。语法如下: SELECT column1, column2 FROM…...
每日学习Java之一万个为什么?
文章目录 Java 异步编排与同步工具类对比一、Java 异步编排概述1. **什么是异步编排?**2. **核心工具:CompletableFuture** 二、CompletableFuture 的优点三、同步工具类对比1. **CountDownLatch**2. **CyclicBarrier**3. **Semaphore** 四、Completable…...
Ubuntu 第11章 网络管理
可以肯定地说,如果没有Linux,今天的互联网可能不会这么发达,Linux天生与网络有着密不可分的关系。据统计,Linux和UNIX在互联网服务器操作系统中已经占据了60%以上的市场份额。网络管理对于Ubuntu系统维护来说是一项非常重要的技能…...
深入解析进程间通信与Socket原理:从理论到TypeScript实战
文章目录 一、进程中如何通信1.1 管道1.1.1 核心特性1.1.2 缺点1.1.3 匿名管道与命名管道的对比 1.2 信号1.2.1 核心特性1.2.2 缺点1.2.3 信号分类对比 1.3 消息队列1.3.1 核心特性1.3.2 缺点 1.4 共享内存1.4.1 核心特性1.4.2 缺点 1.5 信号量1.5.1 核心特性1.5.2 缺点 二、So…...
[特殊字符] Milvus + LLM大模型:打造智能电影知识库系统
今天给大家分享一个超酷的技术组合:Milvus向量数据库 智谱AI大模型!我们将创建一个能理解电影内容的智能搜索系统,不仅能找到相关电影,还能用自然语言总结答案! 🌟 项目背景 这个项目基于Milvus官方案例…...
MapReduce架构-打包运行
(一)maven打包 MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序(例如:jar…...
信创生态核心技术栈:国产芯片架构适配详解
🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C、C#等开发语言,熟悉Java常用开…...
BBDM学习笔记
1. configs 1.1 LBBDM: Latent BBDM [readme]...
6. HTML 锚点链接与页面导航
在开发长页面或文档类网站时,锚点链接(Anchor Links)是一个非常实用的功能。通过学习 HTML 锚点技术,将会掌握如何在同一页面内实现快速跳转,以及如何优化长页面的导航体验。以下是基于给定素材的学习总结和实践心得 一、什么是锚点链接? 锚点链接(也称为页面内链接)允…...
绘制拖拽html
<!DOCTYPE html> <html lang"zh-CN"> <head> <meta charset"UTF-8" /> <meta name"viewport" content"widthdevice-width, initial-scale1" /> <title>拖拽绘制矩形框 - 可移动可调整大小</ti…...
OpenCV计算机视觉实战(3)——计算机图像处理基础
OpenCV计算机视觉实战(3)——计算机图像处理基础 0. 前言1. 像素和图像表示1.1 像素 2. 色彩空间2.1 原色2.2 色彩空间2.3 像素和色彩空间 3. 文件类型3.1 图像文件类型3.2 视频文件3.3 图像与视频 4. 计算机图像编程简史5. OpenCV 概述小结系列链接 0. …...
零基础学Java——第九章:数据库编程(三)
第九章:数据库编程 - ORM框架(下) 在上一部分中,我们学习了ORM框架的基础知识和Hibernate框架。在这一部分中,我们将继续学习其他流行的ORM框架,包括MyBatis和Spring Data JPA。 1. MyBatis框架 1.1 MyB…...
Linux/AndroidOS中进程间的通信线程间的同步 - 信号量
1 概述 本文将介绍 POSIX 信号量,它允许进程和线程同步对共享资源的访问。有两种类型的 POSIX 信号量: 命名信号量:这种信号量拥有一个名字。通过使用相同的名字调用 sem_open(),不相关的进程能够访问同一个信号量。未命名信号量…...
精益数据分析(46/126):深入剖析用户生成内容(UGC)商业模式
精益数据分析(46/126):深入剖析用户生成内容(UGC)商业模式 在创业与数据分析的征程中,每一种商业模式都蕴含着独特的价值与挑战。今天,我们依旧怀揣着共同进步的信念,深入研读《精益…...
vue +xlsx+exceljs 导出excel文档
实现功能:分标题行导出数据过多,一个sheet表里表格条数有限制,需要分sheet显示。 步骤1:安装插件包 npm install exceljs npm install xlsx 步骤2:引用包 import XLSX from xlsx; import ExcelJS from exceljs; 步骤3&am…...
Android 10.0 SharedPreferences in credential encrypted storage are not avai
1.前言 在10.0的系统rom定制化开发中,在开机的过程中,由于某些应用在开机解锁阶段就开始访问查询短信和联系人等功能,所以 会出现抛异常的情况出现,接下来分析下相关的情况,然后来解决这些问题 2.SharedPreferences in credential encrypted storage are not available …...