尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
rerun 数据类型详解:Vec4D 四维向量(FixedSizeList Float32 编码与三端 API 实战)
rerun 数据类型详解Vec4D 四维向量FixedSizeList Float32 编码与三端 API 实战【免费下载链接】rerunVisualize, query, and stream to train on multimodal robotics data.项目地址: https://gitcode.com/GitHub_Trending/re/rerunVec4D 是 rerun 数据模型最底层 Encodings编码/数据类型 层中的一个基础类型表示一个位于四维空间中的向量。本指南以仓库中的 Vec4D 类型文档 为主体结合其 Rust 类型定义、自动生成实现、扩展实现 以及 Encodings 总览 文档为你讲清它的数据编码、内存布局、构造方式以及它在 C / Python / Rust 三端 SDK 中的用法与适用场景。读完你将能够在日志数据时正确地构造和序列化四维向量并理解它在矩阵、着色器与四维张量场景中的角色。类型概述什么是 Vec4D根据 类型文档 的定义Vec4D是A vector in 4D space即四维空间中的一个向量由 4 个f32单精度浮点数构成。在 rerun 的数据模型层级中Encodings数据类型位于最底层是可复用的、被组件Components所使用的类型见 Encodings 总览文档。Vec4D与Vec2D、Vec3D、DVec2D、UVec4D等共同组成了 rerun 内置的向量编码族类型分量类型维度说明Vec2Df322二维空间向量Vec3Df323三维空间向量Vec4Df324四维空间向量DVec2Df642双精度二维向量UVec4Du324无符号整型四维向量需要特别注意的是Vec4D表示的是四维坐标向量而 4 元旋转姿态在 rerun 中由独立的 Quaternion 类型 表示二者不可混用。这是使用四分量类型时最容易踩的坑。Arrow 数据编码FixedSizeList(4 x Float32)类型文档中给出了Vec4D的底层 Arrow 数据布局FixedSizeList(4 x non-null Float32)这意味着Vec4D在 Arrow 内存模型中是一个长度为 4、不允许空值non-null的定长列表列表元素为Float32。从 Rust 自动生成实现 可以印证这一布局vec4d.rs#L43-L52impl ::re_types_core::ArrowDataType for Vec4D { fn arrow_data_type() - arrow::datatypes::DataType { DataType::FixedSizeList( std::sync::Arc::new(Field::new(item, DataType::Float32, false)), 4, ) } }具体来说外层是FixedSizeListArrayvalue_length固定为 4vec4d.rs#L79-L87每个向量占用的存储空间完全一致适合批量列式存储与 SIMD 处理内层是PrimitiveArrayFloat32Typenull标记为None即元素不可为空vec4d.rs#L76-L85反序列化时会对value_length() ! 4的情况直接报datatype_mismatch错误vec4d.rs#L112-L121保证读取端拿到的始终是严格的 4 分量结构反序列化使用bytemuck::try_cast_slice将底层f32缓冲区直接 reinterpret 成[f32; 4]切片vec4d.rs#L122-L132因此要求该类型是零开销、可直接内存转换的 POD 类型。Rust 内存模型[f32; 4]元组结构与组件派生从 类型定义文件 可以看出Vec4D的官方定义骨架#[rerun::rerun_type] #[arrow(transparent)] #[rust(derive(Default, Copy, PartialEq, bytemuck::Pod, bytemuck::Zeroable))] #[rust(repr C)] #[rust(tuple_struct)] #[rerun(state stable)] pub struct Vec4D { pub xyzw: [f32; 4], }vec4d.def.rs是 Rerun SDK 的类型定义源文件并非可执行代码由re_types_builder解析后自动生成 Rust、Python 和 C 三端绑定。定义中的关键标注说明#[arrow(transparent)]Arrow 序列化时直接透传底层[f32; 4]字段即上面的FixedSizeList(4 x Float32)布局#[rust(tuple_struct)]生成的 Rust 结构体是一个元组结构体pub struct Vec4D(pub [f32; 4])见 vec4d.rs#L38-L39并派生Default、Copy、PartialEq、bytemuck::Pod、bytemuck::Zeroable同时实现了re_byte_size::SizeBytes#[rust(repr C)]内存布局按 C ABI 对齐保证与底层f32缓冲区零拷贝互转#[rerun(state stable)]该类型被标记为稳定stableAPI。在 Rust 侧Vec4D提供了与[f32; 4]以及四元组(f32, f32, f32, f32)的双向From转换vec4d.rs#L138-L150、vec4d_ext.rs#L38-L43并支持Index/IndexMut按下标访问分量vec4d_ext.rs#L69-L89。扩展实现构造、分量访问与 glam/mint 互转自动生成文件只负责序列化骨架而 vec4d_ext.rs 提供了面向使用者的扩展 APIVec4D::new(x, y, z, w)常量构造函数vec4d_ext.rs#L8-L11Vec4D::ZERO零向量常量即加法单位元[0.0; 4]vec4d_ext.rs#L4-L5x()/y()/z()/w()分别访问下标 0~3 的分量vec4d_ext.rs#L13-L35Display实现以[x, y, z, w]形式格式化输出小数位数由DEFAULT_DISPLAY_DECIMALS控制vec4d_ext.rs#L128-L140。此外在启用相应 feature 时还提供了与主流数学库的双向转换glamfeatureVec4D ↔ glam::Vec4vec4d_ext.rs#L91-L105mintfeatureVec4D ↔ mint::Vector4f32vec4d_ext.rs#L107-L126。三端 SDK 使用指南由于Vec4D是稳定的公共类型它在 rerun 的 C、Python、Rust 三端 SDK 中均有对应 API类型文档 API reference links 一节Crerun::encodings::Vec4D见类型文档中的 C API 链接适用于使用rerun_cpp的 C 日志端Pythonrerun.encodings.Vec4D类型定义中为 Python 绑定了npt.NDArray[Any] | npt.ArrayLike | Sequence[float]等灵活的类型别名vec4d.def.rs#L7-L10即可以直接传入 numpy 数组、类数组对象或float序列非常贴合数据科学工作流Rustrerun::encodings::Vec4D即上文分析的元组结构体。以 Rust 为例的构造与转换写法基于 vec4d_ext.rs 提供的 APIuse re_sdk_types::encodings::Vec4D; // 方式一直接构造 let v Vec4D::new(1.0, 2.0, 3.0, 4.0); assert_eq!((v.x(), v.y(), v.z(), v.w()), (1.0, 2.0, 3.0, 4.0)); // 方式二从数组 / 四元组转换 let from_array: Vec4D [1.0, 2.0, 3.0, 4.0].into(); let from_tuple: Vec4D (1.0, 2.0, 3.0, 4.0).into(); // 方式三零向量 let zero Vec4D::ZERO;Python 侧则可以直接使用 numpy 或列表构造import rerun.encodings as enc v enc.Vec4D([1.0, 2.0, 3.0, 4.0])典型应用场景矩阵列向量与 4 维数据Vec4D最常见的用途之一是作为 4x4 矩阵Mat4x4的列向量。在 mat4x4_ext.rs 中可以看到这种紧密耦合Mat4x4::col(index) - Vec4D取出矩阵某一列作为四维向量mat4x4_ext.rs#L22From[Vec4D; 4] for Mat4x4由 4 个列向量直接组装成矩阵mat4x4_ext.rs#L45-L48FromMat4x4 for [Vec4D; 4]矩阵拆回 4 个列向量mat4x4_ext.rs#L58。也就是说在需要描述变换、姿态、坐标系统时Vec4D既可以直接承载四维坐标点也可以作为齐次坐标下的列向量参与矩阵运算。此外凡是有4 个单精度浮点数组成一条记录需求的地方如四维张量切片、RGBA 分量级原始数据等Vec4D都是一个低成本、可直接复用的底层载体类型。与 UVec4D 的对比Vec4D容易与无符号版本 UVec4D 混淆二者的唯一区别在于分量类型Vec4D分量是f32Arrow 编码为FixedSizeList(4 x non-null Float32)适合连续数值、坐标、权重等带小数的数据UVec4D分量是u32Arrow 编码为FixedSizeList(4 x non-null UInt32)见 uvec4d.md适合索引、计数、ID 等非负整数数据。需要 4 个整数索引时选UVec4D需要浮点向量时选Vec4D二者在其他方面定长列表、non-null 约束结构一致。小结Vec4D是 rerun 数据类型体系中一个看似简单却承担基础作用的编码类型它以FixedSizeList(4 x non-null Float32)的 Arrow 布局存储四个f32分量在 Rust 中以pub struct Vec4D(pub [f32; 4])的零开销元组结构体呈现并打通了 C、Python、Rust 三端 API 与glam、mint等常用数学库。无论是作为Mat4x4的列向量还是作为四维浮点数据的通用载体理解它的内存布局与转换关系都能帮助你更精准地构建和序列化自己的日志数据。【免费下载链接】rerunVisualize, query, and stream to train on multimodal robotics data.项目地址: https://gitcode.com/GitHub_Trending/re/rerun创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

AI编码工程化落地:从概率生成到确定性交付

AI编码工程化落地:从概率生成到确定性交付

1. 这不是“AI写代码”,而是工程系统在重构——为什么懂落地的人永远手握主动权最近刷到太多标题党:“AI十分钟写出完整电商系统”“大模型自动修复所有Bug”,点进去一看,全是拿ChatGPT生成一段Hello World再截图配文。我带过7个从…

📅 2026/9/17 6:15:56
Java日期格式化:yyyy与YYYY的隐藏差异与正确用法

Java日期格式化:yyyy与YYYY的隐藏差异与正确用法

1. 日期格式化中的隐藏陷阱作为一名Java开发者,你可能每天都在使用SimpleDateFormat进行日期格式化,但你是否注意过yyyy和YYYY的区别?这个看似微小的字母大小写差异,在实际项目中可能引发严重的日期计算错误。我在处理财务系统年报…

📅 2026/9/17 6:15:56
GPT-4 Turbo图像理解2.5版:空间语义锚点与工程级视觉推理

GPT-4 Turbo图像理解2.5版:空间语义锚点与工程级视觉推理

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/17 6:15:56
MORE NEWS

更多资讯

📰

STM32 ADC-DMA多通道采样实战:原理、配置与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Folo搜索功能:全文搜索与过滤算法

Folo搜索功能:全文搜索与过滤算法 在信息爆炸的时代,如何快速精准地找到所需内容成为提升效率的关键。Folo作为新一代信息浏览器,其搜索功能融合了全文检索与智能过滤算法,帮助用户在海量订阅源中快速定位有价值的信息。本文将深…

📰

Velero(v0.8.0 时代 Ark)插件管理命令 `ark plugin` 完全指南:add / remove / get 与插件体系原理

Velero(v0.8.0 时代 Ark)插件管理命令 ark plugin 完全指南:add / remove / get 与插件体系原理 【免费下载链接】velero Backup and migrate Kubernetes applications and their persistent volumes 项目地址: https://gitcode.com/GitHub…

📰

汽车电子工程师成长路径:CAN/CAN FD、AUTOSAR与功能安全实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

BUCK电路七十年演进:从线性稳压到超高密度智能电源

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Cadence SIP版图实战:从2.5D/3D封装到热-电耦合签核

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬