# Eigen Tensors
Tensors are multidimensional arrays of elements. Elements are typically scalars,
but more complex types such as strings are also supported.
[TOC]
## Tensor Classes
You can manipulate a tensor with one of the following classes. They all are in
the namespace ```::Eigen.```
### Class Tensor<data_type, rank>
This is the class to use to create a tensor and allocate memory for it. The
class is templatized with the tensor datatype, such as float or int, and the
tensor rank. The rank is the number of dimensions, for example rank 2 is a
matrix.
Tensors of this class are resizable. For example, if you assign a tensor of a
different size to a Tensor, that tensor is resized to match its new value.
#### Constructor Tensor<data_type, rank>(size0, size1, ...)
Constructor for a Tensor. The constructor must be passed ```rank``` integers
indicating the sizes of the instance along each of the the ```rank```
dimensions.
// Create a tensor of rank 3 of sizes 2, 3, 4. This tensor owns
// memory to hold 24 floating point values (24 = 2 x 3 x 4).
Tensor<float, 3> t_3d(2, 3, 4);
// Resize t_3d by assigning a tensor of different sizes, but same rank.
t_3d = Tensor<float, 3>(3, 4, 3);
#### Constructor Tensor<data_type, rank>(size_array)
Constructor where the sizes for the constructor are specified as an array of
values instead of an explicitly list of parameters. The array type to use is
```Eigen::array<Eigen::Index>```. The array can be constructed automatically
from an initializer list.
// Create a tensor of strings of rank 2 with sizes 5, 7.
Tensor<string, 2> t_2d({5, 7});
### Class TensorFixedSize<data_type, Sizes<size0, size1, ...>>
Class to use for tensors of fixed size, where the size is known at compile
time. Fixed sized tensors can provide very fast computations because all their
dimensions are known by the compiler. FixedSize tensors are not resizable.
If the total number of elements in a fixed size tensor is small enough the
tensor data is held onto the stack and does not cause heap allocation and free.
// Create a 4 x 3 tensor of floats.
TensorFixedSize<float, Sizes<4, 3>> t_4x3;
### Class TensorMap<Tensor<data_type, rank>>
This is the class to use to create a tensor on top of memory allocated and
owned by another part of your code. It allows to view any piece of allocated
memory as a Tensor. Instances of this class do not own the memory where the
data are stored.
A TensorMap is not resizable because it does not own the memory where its data
are stored.
#### Constructor TensorMap<Tensor<data_type, rank>>(data, size0, size1, ...)
Constructor for a Tensor. The constructor must be passed a pointer to the
storage for the data, and "rank" size attributes. The storage has to be
large enough to hold all the data.
// Map a tensor of ints on top of stack-allocated storage.
int storage[128]; // 2 x 4 x 2 x 8 = 128
TensorMap<int, 4> t_4d(storage, 2, 4, 2, 8);
// The same storage can be viewed as a different tensor.
// You can also pass the sizes as an array.
TensorMap<int, 2> t_2d(storage, 16, 8);
// You can also map fixed-size tensors. Here we get a 1d view of
// the 2d fixed-size tensor.
Tensor<float, Sizes<4, 5>> t_4x3;
TensorMap<float, 1> t_12(t_4x3, 12);
#### Class TensorRef
See Assigning to a TensorRef below.
## Accessing Tensor Elements
#### <data_type> tensor(index0, index1...)
Return the element at position ```(index0, index1...)``` in tensor
```tensor```. You must pass as many parameters as the rank of ```tensor```.
The expression can be used as an l-value to set the value of the element at the
specified position. The value returned is of the datatype of the tensor.
// Set the value of the element at position (0, 1, 0);
Tensor<float, 3> t_3d(2, 3, 4);
t_3d(0, 1, 0) = 12.0f;
// Initialize all elements to random values.
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 3; ++j) {
for (int k = 0; k < 4; ++k) {
t_3d(i, j, k) = ...some random value...;
}
}
}
// Print elements of a tensor.
for (int i = 0; i < 2; ++i) {
LOG(INFO) << t_3d(i, 0, 0);
}
## TensorLayout
The tensor library supports 2 layouts: ```ColMajor``` (the default) and
```RowMajor```. Only the default column major layout is currently fully
supported, and it is therefore not recommended to attempt to use the row major
layout at the moment.
The layout of a tensor is optionally specified as part of its type. If not
specified explicitly column major is assumed.
Tensor<float, 3, ColMajor> col_major; // equivalent to Tensor<float, 3>
TensorMap<Tensor<float, 3, RowMajor> > row_major(data, ...);
All the arguments to an expression must use the same layout. Attempting to mix
different layouts will result in a compilation error.
It is possible to change the layout of a tensor or an expression using the
```swap_layout()``` method. Note that this will also reverse the order of the
dimensions.
Tensor<float, 2, ColMajor> col_major(2, 4);
Tensor<float, 2, RowMajor> row_major(2, 4);
Tensor<float, 2> col_major_result = col_major; // ok, layouts match
Tensor<float, 2> col_major_result = row_major; // will not compile
// Simple layout swap
col_major_result = row_major.swap_layout();
eigen_assert(col_major_result.dimension(0) == 4);
eigen_assert(col_major_result.dimension(1) == 2);
// Swap the layout and preserve the order of the dimensions
array<int, 2> shuffle(1, 0);
col_major_result = row_major.swap_layout().shuffle(shuffle);
eigen_assert(col_major_result.dimension(0) == 2);
eigen_assert(col_major_result.dimension(1) == 4);
## Tensor Operations
The Eigen Tensor library provides a vast library of operations on Tensors:
numerical operations such as addition and multiplication, geometry operations
such as slicing and shuffling, etc. These operations are available as methods
of the Tensor classes, and in some cases as operator overloads. For example
the following code computes the elementwise addition of two tensors:
Tensor<float, 3> t1(2, 3, 4);
...set some values in t1...
Tensor<float, 3> t2(2, 3, 4);
...set some values in t2...
// Set t3 to the element wise sum of t1 and t2
Tensor<float, 3> t3 = t1 + t2;
While the code above looks easy enough, it is important to understand that the
expression ```t1 + t2``` is not actually adding the values of the tensors. The
expression instead constructs a "tensor operator" object of the class
TensorCwiseBinaryOp<scalar_sum>, which has references to the tensors
```t1``` and ```t2```. This is a small C++ object that knows how to add
```t1``` and ```t2```. It is only when the value of the expression is assigned
to the tensor ```t3``` that the addition is actually performed. Technically,
this happens through the overloading of ```operator=()``` in the Tensor class.
This mechanism for computing tensor expressions allows for lazy evaluation and
optimizations which are what make the tensor library very fast.
Of course, the tensor operators do nest, and the expression ```t1 + t2 *
0.3f``` is actually represented with the (approximate) tree of operators:
TensorCwiseBinaryOp<scalar_sum>(t1, TensorCwiseUnaryOp<scalar_mul>(t2, 0.3f))
### Tensor Operations and C++ "auto"
Because Tensor operations create tensor operators, the C++ ```auto``` keyword
does not have its intuitive meaning. Consider these 2 lines of code:
Tensor<float, 3> t3 = t1 + t2;
auto t4 = t1 + t2;
In the first line we allocate the tensor ```t3``` and it will contain the
result of the addition of ```t1``` and ```t2```. In the second line, ```t4```
is actually the tree of tensor operators that will compute the addition of
```t1``` and ```t2```. In fact, ```t4``` is *not* a tensor and you cannot get
the values of its elements:
Tensor<float, 3> t3 = t1 + t2;
cout << t3(0, 0, 0
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
资源包含文件:设计报告word+源码及数据 运动学模型:忽略了轮胎的力,重力和质量的影响。 动力学模型:考虑了轮胎的力,纵向和横向受到的力,重力,惯性,质量,以及车子的结构等。 和追踪车辆状态一样,当前车辆模型预测包括位置x,y,角度ψ,速度v 详细介绍参考:https://biyezuopin.blog.csdn.net/article/details/124689518
资源推荐
资源详情
资源评论
收起资源包目录
基于MPC算法控制车辆的运动轨迹.zip (1641个子文件)
AdolcForward 4KB
AlignedVector3 6KB
ArpackSupport 905B
AutoDiff 1KB
bench_unrolling 651B
benchmark_suite 1KB
COPYING.BSD 1KB
BVH 5KB
ztbmv.c 19KB
ctbmv.c 19KB
zhbmv.c 15KB
chbmv.c 15KB
zhpmv.c 13KB
chpmv.c 13KB
dtbmv.c 11KB
stbmv.c 11KB
ssbmv.c 10KB
dsbmv.c 10KB
dspmv.c 8KB
sspmv.c 8KB
drotmg.c 6KB
srotmg.c 6KB
drotm.c 5KB
srotm.c 5KB
lsame.c 3KB
complexdots.c 2KB
example.c 2KB
d_cnjg.c 117B
r_cnjg.c 105B
benchmark_main.cc 7KB
tensor_benchmarks_cpu.cc 6KB
contraction_benchmarks_cpu.cc 1KB
tensor_benchmarks_sycl.cc 1KB
Cholesky 1KB
CholmodSupport 2KB
EigenTesting.cmake 26KB
FindBLAS.cmake 13KB
FindLAPACK.cmake 10KB
FindComputeCpp.cmake 9KB
FindGSL.cmake 5KB
FindEigen3.cmake 3KB
FindGLEW.cmake 3KB
FindMPFR.cmake 3KB
FindEigen2.cmake 3KB
FindFFTW.cmake 3KB
EigenConfigureTesting.cmake 3KB
FindCholmod.cmake 3KB
language_support.cmake 2KB
FindPackageHandleStandardArgs.cmake 2KB
FindSuperLU.cmake 2KB
FindStandardMathLibrary.cmake 2KB
FindMetis.cmake 2KB
EigenDetermineVSServicePack.cmake 2KB
FindUmfpack.cmake 2KB
EigenDetermineOSVersion.cmake 2KB
FindMKL.cmake 1KB
FindATLAS.cmake 1KB
MacroOptionalAddSubdirectory.cmake 1KB
EigenUninstall.cmake 1KB
FindSPQR.cmake 1KB
FindBlitz.cmake 1KB
RegexUtils.cmake 936B
FindACML.cmake 932B
FindGoogleHash.cmake 909B
FindTvmet.cmake 832B
FindMTL4.cmake 819B
FindBLAZE.cmake 815B
FindPastix.cmake 716B
FindCBLAS.cmake 668B
FindOPENBLAS.cmake 622B
FindScotch.cmake 615B
FindGMP.cmake 554B
CTestConfig.cmake 541B
FindAdolc.cmake 501B
FindGMM.cmake 366B
UseEigen3.cmake 177B
CODEOWNERS 17B
COPYING 18KB
Core 17KB
NonLinearOptimization.cpp 64KB
cxx11_tensor_symmetry.cpp 58KB
levenberg_marquardt.cpp 54KB
cxx11_tensor_image_patch.cpp 33KB
analyze-blocking-sizes.cpp 28KB
sparse_basic.cpp 25KB
packetmath.cpp 24KB
geo_transformations.cpp 23KB
benchmark-blocking-sizes.cpp 22KB
cxx11_tensor_contraction.cpp 21KB
vectorization_logic.cpp 19KB
evaluators.cpp 19KB
array.cpp 19KB
quaternion_demo.cpp 19KB
sparse_product.cpp 18KB
cxx11_tensor_index_list.cpp 18KB
cxx11_meta.cpp 18KB
cholesky.cpp 17KB
mixingtypes.cpp 16KB
special_functions.cpp 16KB
cxx11_tensor_morphing.cpp 15KB
共 1641 条
- 1
- 2
- 3
- 4
- 5
- 6
- 17
资源评论
- coke_95272022-07-13资源值得借鉴的内容很多,那就浅学一下吧,值得下载!
- Blackbisons2023-03-07资源中能够借鉴的内容很多,值得学习的地方也很多,大家一起进步!
shejizuopin
- 粉丝: 1w+
- 资源: 1300
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 【java毕业设计】图书管理系统源码(springboot+vue+mysql+说明文档+LW).zip
- SGLang: 高效执行结构化语言模型程序
- 系统源码A057-基于SpringBoot的失物招领平台的设计与实现
- 基于 SpringBoot 高校就业招聘系统:整合资源与服务的技术架构探索
- SSM威宁草海旅游(附源码+数据库)24776
- UDS ISO-14229协议中文翻译
- 自然语言处理领域的并行解码优化研究:大型语言模型的思考骨架(Skeleton-of-Thought)技术
- C#ASP.NET企业展会网站源码数据库 Access源码类型 WebForm
- LLM推理优化:带批处理与缓存的自回归跳过解码技术SkipDecode
- 探索ChatGPT能力及其与人类偏好一致性的初步研究
- 天池2019阿里巴巴优酷视频增强和超分辨率挑战赛,EDVR、WDSR、ESRGAN三个模型.zip
- 本报告基于电商平台的订单数据进行深入分析,旨在通过数据挖掘和可视化手段,洞察电商业务的运营状况,识别市场趋势,优化产品策略,并提出针对性的营销策略建议 报告涵盖数据预处理、财务分析、产品分析、市场分析
- 大数据环境下大型语言模型的数据合成与增强方法综述
- Linux无窗口系统的图形界面demo程序(kmscube)
- Unity游戏中高效的UI管理系统设计与实现
- python《使用神经网络和NLP技术实现的高中物理知识点分类》+源码+文档说明(高分作品)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功