3.Eigen Tensor详解【二】

本文深入解析Eigen库中的Tensor模块,涵盖Tensor属性查询、初始化、元素访问及各类运算,包括一元、二元、选择和降维操作,为读者提供全面的Tensor操作指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

 

 七 相关API说明

1.Tensor 属性的查询

2.初始化

1. setConstant(const Scalar& val)

2.  setZero()

3. setValues({..initializer_list})

4. setRandom()

3.访问tensor元素

1.Tensor、TensorFixedSize、TensorRef 提供了如下几种方法访问tensor元素

2.Scalar* data() and const Scalar* data() const

4.Tensor 运算

1. constant(const Scalar& val)

2. random()

3.一元操作

4. 二元运算/逻辑运算

5.Selection

6.降维运算


 七 相关API说明

1.Tensor 属性的查询

void testTensorInfo()
{
	//1. NumDimensions 输出维度个数
	Eigen::Tensor<float, 2> a(3, 4);
	cout << "Dims " << a.NumDimensions <<endl; // 输出:Dims:2

	//2. dimensions() 输出不同维度的size
	//typedef DSizes<Index, NumIndices_> Dimensions;
	const Eigen::Tensor<float, 2>::Dimensions & d = a.dimensions();

	cout << "Dim size: " << d.size()<< ", dim 0: " << d[0]
		<< ", dim 1: " << d[1] <<endl; //Dim size: 2, dim 0: 3, dim 1: 4

	//3. Index dimension(Index n) 输出第n 维的维度
	int dim1 = a.dimension(1);
	cout << "Dim 1: " << dim1 <<endl; // Dim 1: 4

	//4. Index size() 输出tensor的总元素个数

	cout << "Size: " << a.size() <<endl;

}

2.初始化

当Tensor 或TensorFixedSize 创建的时候,内存已经分配,但是没有被初始化,同样第,当TensorMap如果Map了没有初始化的Tensor,它同样也没有初始化。

初始化方法有如下几种

1.<Tensor-Type> setConstant(const Scalar& val)

设置tensor所有的元素值都等于val ,Scalar 是tensor存储的数据类型

返回值是tensor本身,如下代码所示

Eigen::Tensor<float, 2> a(3, 4);

a.setConstant(12.3f);
cout << "Constant: " << endl << a << endl << endl;

setConstant()可以用于任何tensor(只要tensor存储的数据类型拥有拷贝构造函数和 operator=() )

Eigen::Tensor<string, 2> b(2, 3);
b.setConstant("yolo");
cout << "String tensor: " << endl << b << endl << endl;

2. <Tensor-Type> setZero()

将tensor的所有元素设置为0,该操作相当于调用 setContent(Scalar(0))

返回tensor 本身(用于链式调用)

a.setZero();
cout << "Zero Constant: " << endl << a << endl << endl;

3.<Tensor-Type> setValues({..initializer_list})

用初始化列表填充tensor,初始化列表的数据类型和维度取决于tensor的类型和维度

如果tensor的维度是N ,那么初始化列表(initializer_list) 必须嵌套N次,最深层次的嵌套列表里面必须包含P 个元素(P是tensor最后一维的元素个数

setValues 返回tensor本身

	Eigen::Tensor<float, 2> c(2, 3);
	c.setValues({ {0.0f, 1.0f, 2.0f}, {3.0f, 4.0f, 5.0f} });
	cout << "c setValues" << endl << c << endl << endl;

下面的代码可以只设置tensor的第一行

    Eigen::Tensor<int, 2> d(2, 3);
	d.setConstant(1000);
	d.setValues({ {10, 20, 30} });
	cout << "d" << endl << d << endl << endl;

4.<Tensor-Type> setRandom()

用随机值填充tensor ,返回tensor本身

c.setRandom();
cout << "Random: " << endl << c << endl << endl;

 

3.访问tensor元素

1.Tensor、TensorFixedSize、TensorRef 提供了如下几种方法访问tensor元素

const Scalar& operator()(const array<Index, NumIndices>& indices)
const Scalar& operator()(Index firstIndex, IndexTypes... otherIndices)
Scalar& operator()(const array<Index, NumIndices>& indices)
Scalar& operator()(Index firstIndex, IndexTypes... otherIndices)
	Eigen::Tensor<float, 2> c(2, 3);
	c.setValues({ {0.0f, 1.0f, 2.0f}, {3.0f, 4.0f, 5.0f} });
	cout << c(0,1) <<endl;
	cout << c(0) << endl;

2.Scalar* data() and const Scalar* data() const

返回tensor的存储的数据指针,数据的layout依赖于tensor的layout(RowMajor 或ColMajor)

void testAccess()
{
	Eigen::Tensor<float, 2> c(2, 3);
	c.setValues({ {0.0f, 1.0f, 2.0f}, {3.0f, 4.0f, 5.0f} });
	cout << c(0,1) <<endl;
	cout << c(0) << endl;

	Eigen::Tensor<float, 2> a(3, 4);
	float* a_data = a.data();
	a_data[0] = 123.45f;
	cout << "a(0, 0): " << a(0, 0);

}

该方法通常用于比较特殊的情况下,比如将Eigon 与其他库联合使用的情况下

 

4.Tensor 运算

1.<Operation> constant(const Scalar& val)

返回一个tensor 与原tensor具有相同的维度和数据类型,并且所有的数据元素均被赋值为val


void testOperation()
{
	Eigen::Tensor<float, 2> a(2, 3);
	a.setConstant(1.0f);
	Eigen::Tensor<float, 2> b = a + a.constant(2.0f);
	Eigen::Tensor<float, 2> c = b * b.constant(0.2f);
	cout << "a" << endl << a << endl << endl;
	cout << "b" << endl << b << endl << endl;
	cout << "c" << endl << c << endl << endl;
}

2.<Operation> random()

返回一个tensor 与原tensor具有相同的维度和数据类型,并且所有的数据元素被随机赋值


	Eigen::Tensor<float, 2> d = c * c.random();
	cout << "d" << endl << d << endl << endl;

 

3.一元操作

<Operation> operator-() 求相反数

<Operation> sqrt() 平方根

<Operation> rsqrt() 逆平方根

<Operation> square() 平方

<Operation> inverse()求逆

<Operation> exp()指数

<Operation> log() log运算

<Operation> abs() 绝对值

<Operation> pow(Scalar exponent)

<Operation> operator * (Scalar scale) 乘以某个值


void testUnary()
{
	Eigen::Tensor<int, 2> a(2, 3);
	a.setValues({ {0, 1, 8}, {27, 64, 125} });
	Eigen::Tensor<double, 2> b = a.cast<double>().pow(1.0 / 3.0);
	Eigen::Tensor<double, 2> sqrt = a.cast<double>().sqrt();
	Eigen::Tensor<double, 2> rsqrt = a.cast<double>().rsqrt();
	Eigen::Tensor<double, 2> square = a.cast<double>().square();
	Eigen::Tensor<double, 2> inverse = a.cast<double>().inverse();
	Eigen::Tensor<double, 2> exp = a.cast<double>().exp();
	Eigen::Tensor<double, 2> log = a.cast<double>().log();
	Eigen::Tensor<double, 2> abs = a.cast<double>().abs();
	Eigen::Tensor<int, 2> multiply = a * 2;
	cout << "a" << endl << a << endl << endl;
	cout << "b" << endl << b << endl << endl;

	cout << "b" << endl << b << endl << endl;
	cout << "sqrt" << endl << sqrt << endl << endl;
	cout << "rsqrt" << endl << rsqrt << endl << endl;
	cout << "square" << endl << square << endl << endl;
	cout << "inverse" << endl << inverse << endl << endl;
	cout << "exp" << endl << exp << endl << endl;
	cout << "log" << endl << log << endl << endl;
	cout << "abs" << endl << abs << endl << endl;
	cout << "multiply" << endl << multiply << endl << endl;
}

	Eigen::Tensor<float, 2> f(2, 3);
	f.setConstant(1.0f);
	Eigen::Tensor<float, 2> g = -f;
	cout << "f" << endl << f << endl << endl;
	cout << "g" << endl << g << endl << endl;

4. 二元运算/逻辑运算

<Operation> operator+(const OtherDerived& other)
<Operation> operator-(const OtherDerived& other)
<Operation> operator*(const OtherDerived& other)
<Operation> operator/(const OtherDerived& other)
<Operation> cwiseMax(const OtherDerived& other) //返回与原tensor同类型,同尺寸的tensor,且以两个原tensor的最大值填充
<Operation> cwiseMin(const OtherDerived& other)
//返回与原tensor同类型,同尺寸的tensor,且以两个原tensor的最小值填充
operator&&(const OtherDerived& other)
operator||(const OtherDerived& other)
operator<(const OtherDerived& other)
operator<=(const OtherDerived& other)
operator>(const OtherDerived& other)
operator>=(const OtherDerived& other)
operator==(const OtherDerived& other)
operator!=(const OtherDerived& other)

void testBinary()
{
	Eigen::Tensor<int, 2> a(2, 3);
	a.setValues({ {0, 1, 8}, {27, 64, 125} });

	Eigen::Tensor<int, 2> b = a * 3;

	cout << "a" << endl << a << endl << endl;
	cout << "b" << endl << b << endl << endl;
	cout << "a+b" << endl << a + b << endl << endl;
	cout << "a-b" << endl << a - b << endl << endl;
	cout << "a*b" << endl << a * b << endl << endl;
	cout << "a.cwiseMax(b)" << endl <<a.cwiseMax(b) << endl << endl;
	cout << "b.cwiseMax(a)" << endl << b.cwiseMax(a) << endl << endl;
	cout << "a.cwiseMin(b)" << endl << a.cwiseMin(b) << endl << endl;
	cout << "b.cwiseMin(a)" << endl << b.cwiseMin(a) << endl << endl;

}

5.Selection

Selection 是一个三元操作符,if,then ,else 他们必须具有相同的维度,if tensor必须是bool类型的,then 和 else 必须具有相同的类型。

result 中的每一个元素值通过如下运算得到:

如果 if中相应位置的元素是true,则result的结果为 then相应位置的值,否则为else相应位置的值

void testSelection()
{
	Eigen::Tensor<bool, 2> _if(2,2);
	_if.setValues({ { false,true }, { true,false } });
	Eigen::Tensor<int, 2> _then (2,2);
	_then.setValues({ { 2,2 }, { 2,2 } });
	Eigen::Tensor<int, 2> _else (2,2);
	_else.setValues({ { 10,10 }, { 10,10 } });
	Eigen::Tensor<int, 2> result = _if.select(_then, _else);
	cout << "result:" << endl << result << endl;

}

6.降维运算

降维运算返回的tensor比原始tensor具有更少的维度,返回的tensor的值是通过对原始tensor的值切片应用一个降维算子来计算的。切片的维度可以手动指定(切片指的是需要获取元素的下标)

相关测试代码见:https://github.com/Mayi-Keiji/EigenTest.git

未完待续~~

 

/usr/local/include/eigen3/Eigen/src/SparseLU/SparseLU_Memory.h /usr/local/include/eigen3/Eigen/src/SparseLU/SparseLU_Structs.h /usr/local/include/eigen3/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h /usr/local/include/eigen3/Eigen/src/SparseLU/SparseLU_Utils.h /usr/local/include/eigen3/Eigen/src/SparseLU/SparseLU_column_bmod.h /usr/local/include/eigen3/Eigen/src/SparseLU/SparseLU_column_dfs.h /usr/local/include/eigen3/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h /usr/local/include/eigen3/Eigen/src/SparseLU/SparseLU_gemm_kernel.h /usr/local/include/eigen3/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h /usr/local/include/eigen3/Eigen/src/SparseLU/SparseLU_kernel_bmod.h /usr/local/include/eigen3/Eigen/src/SparseLU/SparseLU_panel_bmod.h /usr/local/include/eigen3/Eigen/src/SparseLU/SparseLU_panel_dfs.h /usr/local/include/eigen3/Eigen/src/SparseLU/SparseLU_pivotL.h /usr/local/include/eigen3/Eigen/src/SparseLU/SparseLU_pruneL.h /usr/local/include/eigen3/Eigen/src/SparseLU/SparseLU_relax_snode.h /usr/local/include/eigen3/Eigen/src/SparseQR/SparseQR.h /usr/local/include/eigen3/Eigen/src/StlSupport/StdDeque.h /usr/local/include/eigen3/Eigen/src/StlSupport/StdList.h /usr/local/include/eigen3/Eigen/src/StlSupport/StdVector.h /usr/local/include/eigen3/Eigen/src/StlSupport/details.h /usr/local/include/eigen3/Eigen/src/SuperLUSupport/SuperLUSupport.h /usr/local/include/eigen3/Eigen/src/UmfPackSupport/UmfPackSupport.h /usr/local/include/eigen3/Eigen/src/misc/Image.h /usr/local/include/eigen3/Eigen/src/misc/Kernel.h /usr/local/include/eigen3/Eigen/src/misc/RealSvd2x2.h /usr/local/include/eigen3/Eigen/src/misc/blas.h /usr/local/include/eigen3/Eigen/src/misc/lapack.h /usr/local/include/eigen3/Eigen/src/misc/lapacke.h /usr/local/include/eigen3/Eigen/src/misc/lapacke_mangling.h /usr/local/include/eigen3/Eigen/src/plugins/ArrayCwiseBinaryOps.h /usr/local/include/eigen3/Eigen/src/plugins/ArrayCwiseUnaryOps.h /usr/local/include/eigen3/Eigen/src/plugins/BlockMethods.h /usr/local/include/eigen3/Eigen/src/plugins/CommonCwiseBinaryOps.h /usr/local/include/eigen3/Eigen/src/plugins/CommonCwiseUnaryOps.h /usr/local/include/eigen3/Eigen/src/plugins/IndexedViewMethods.h /usr/local/include/eigen3/Eigen/src/plugins/MatrixCwiseBinaryOps.h /usr/local/include/eigen3/Eigen/src/plugins/MatrixCwiseUnaryOps.h /usr/local/include/eigen3/Eigen/src/plugins/ReshapedMethods.h /usr/local/include/eigen3/unsupported/Eigen /usr/local/include/eigen3/unsupported/Eigen/AdolcForward /usr/local/include/eigen3/unsupported/Eigen/AlignedVector3 /usr/local/include/eigen3/unsupported/Eigen/ArpackSupport /usr/local/include/eigen3/unsupported/Eigen/AutoDiff /usr/local/include/eigen3/unsupported/Eigen/BVH /usr/local/include/eigen3/unsupported/Eigen/CXX11 /usr/local/include/eigen3/unsupported/Eigen/EulerAngles /usr/local/include/eigen3/unsupported/Eigen/FFT /usr/local/include/eigen3/unsupported/Eigen/IterativeSolvers /usr/local/include/eigen3/unsupported/Eigen/KroneckerProduct /usr/local/include/eigen3/unsupported/Eigen/LevenbergMarquardt /usr/local/include/eigen3/unsupported/Eigen/MPRealSupport /usr/local/include/eigen3/unsupported/Eigen/MatrixFunctions /usr/local/include/eigen3/unsupported/Eigen/MoreVectorization /usr/local/include/eigen3/unsupported/Eigen/NonLinearOptimization /usr/local/include/eigen3/unsupported/Eigen/NumericalDiff /usr/local/include/eigen3/unsupported/Eigen/OpenGLSupport /usr/local/include/eigen3/unsupported/Eigen/Polynomials /usr/local/include/eigen3/unsupported/Eigen/Skyline /usr/local/include/eigen3/unsupported/Eigen/SparseExtra /usr/local/include/eigen3/unsupported/Eigen/SpecialFunctions /usr/local/include/eigen3/unsupported/Eigen/Splines /usr/local/include/eigen3/unsupported/Eigen/src /usr/local/include/eigen3/unsupported/Eigen/CXX11/Tensor /usr/local/include/eigen3/unsupported/Eigen/CXX11/TensorSymmetry /usr/local/include/eigen3/unsupported/Eigen/CXX11/ThreadPool /usr/local/include/eigen3/unsupported/Eigen/CXX11/src /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/util /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/Tensor.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorArgMax.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorAssign.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorBase.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorBlock.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorBroadcasting.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorChipping.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConcatenation.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContraction.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionBlocking.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionGpu.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionMapper.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionSycl.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionThreadPool.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConversion.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConvolution.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConvolutionSycl.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorCostModel.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorCustomOp.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDevice.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceCuda.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceDefault.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceGpu.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceSycl.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceThreadPool.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDimensionList.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDimensions.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorEvalTo.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorEvaluator.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorExpr.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorFFT.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorFixedSize.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorForcedEval.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorForwardDeclarations.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorFunctors.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGenerator.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGlobalFunctions.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGpuHipCudaDefines.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGpuHipCudaUndefines.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIO.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorImagePatch.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIndexList.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorInflation.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorInitializer.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIntDiv.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorLayoutSwap.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMacros.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMap.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMeta.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMorphing.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorPadding.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorPatch.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorRandom.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReduction.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReductionCuda.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReductionGpu.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReductionSycl.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorRef.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReverse.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorScan.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorScanSycl.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorShuffling.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorStorage.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorStriding.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorTrace.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorTraits.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorUInt128.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorVolumePatch.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/DynamicSymmetry.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/StaticSymmetry.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/Symmetry.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/util /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/util/TemplateGroupTheory.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/Barrier.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/EventCount.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/NonBlockingThreadPool.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/RunQueue.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadCancel.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadEnvironment.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadLocal.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadPoolInterface.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadYield.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/util/CXX11Meta.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/util/CXX11Workarounds.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/util/EmulateArray.h /usr/local/include/eigen3/unsupported/Eigen/CXX11/src/util/MaxSizeVector.h /usr/local/include/eigen3/unsupported/Eigen/src/AutoDiff /usr/local/include/eigen3/unsupported/Eigen/src/BVH /usr/local/include/eigen3/unsupported/Eigen/src/Eigenvalues /usr/local/include/eigen3/unsupported/Eigen/src/EulerAngles /usr/local/include/eigen3/unsupported/Eigen/src/FFT /usr/local/include/eigen3/unsupported/Eigen/src/IterativeSolvers /usr/local/include/eigen3/unsupported/Eigen/src/KroneckerProduct /usr/local/include/eigen3/unsupported/Eigen/src/LevenbergMarquardt /usr/local/include/eigen3/unsupported/Eigen/src/MatrixFunctions /usr/local/include/eigen3/unsupported/Eigen/src/MoreVectorization /usr/local/include/eigen3/unsupported/Eigen/src/NonLinearOptimization /usr/local/include/eigen3/unsupported/Eigen/src/NumericalDiff /usr/local/include/eigen3/unsupported/Eigen/src/Polynomials /usr/local/include/eigen3/unsupported/Eigen/src/Skyline /usr/local/include/eigen3/unsupported/Eigen/src/SparseExtra /usr/local/include/eigen3/unsupported/Eigen/src/SpecialFunctions /usr/local/include/eigen3/unsupported/Eigen/src/Splines /usr/local/include/eigen3/unsupported/Eigen/src/AutoDiff/AutoDiffJacobian.h /usr/local/include/eigen3/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h /usr/local/include/eigen3/unsupported/Eigen/src/AutoDiff/AutoDiffVector.h /usr/local/include/eigen3/unsupported/Eigen/src/BVH/BVAlgorithms.h /usr/local/include/eigen3/unsupported/Eigen/src/BVH/KdBVH.h /usr/local/include/eigen3/unsupported/Eigen/src/Eigenvalues/ArpackSelfAdjointEigenSolver.h /usr/local/include/eigen3/unsupported/Eigen/src/EulerAngles/EulerAngles.h /usr/local/include/eigen3/unsupported/Eigen/src/EulerAngles/EulerSystem.h /usr/local/include/eigen3/unsupported/Eigen/src/FFT/ei_fftw_impl.h /usr/local/include/eigen3/unsupported/Eigen/src/FFT/ei_kissfft_impl.h /usr/local/include/eigen3/unsupported/Eigen/src/IterativeSolvers/ConstrainedConjGrad.h /usr/local/include/eigen3/unsupported/Eigen/src/IterativeSolvers/DGMRES.h /usr/local/include/eigen3/unsupported/Eigen/src/IterativeSolvers/GMRES.h /usr/local/include/eigen3/unsupported/Eigen/src/IterativeSolvers/IDRS.h /usr/local/include/eigen3/unsupported/Eigen/src/IterativeSolvers/IncompleteLU.h /usr/local/include/eigen3/unsupported/Eigen/src/IterativeSolvers/IterationController.h /usr/local/include/eigen3/unsupported/Eigen/src/IterativeSolvers/MINRES.h /usr/local/include/eigen3/unsupported/Eigen/src/IterativeSolvers/Scaling.h /usr/local/include/eigen3/unsupported/Eigen/src/KroneckerProduct/KroneckerTensorProduct.h /usr/local/include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMcovar.h /usr/local/include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMonestep.h /usr/local/include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMpar.h /usr/local/include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMqrsolv.h /usr/local/include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LevenbergMarquardt.h /usr/local/include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixExponential.h /usr/local/include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixFunction.h /usr/local/include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixLogarithm.h /usr/local/include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixPower.h /usr/local/include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixSquareRoot.h /usr/local/include/eigen3/unsupported/Eigen/src/MatrixFunctions/StemFunction.h /usr/local/include/eigen3/unsupported/Eigen/src/MoreVectorization/MathFunctions.h /usr/local/include/eigen3/unsupported/Eigen/src/NonLinearOptimization/HybridNonLinearSolver.h /usr/local/include/eigen3/unsupported/Eigen/src/NonLinearOptimization/LevenbergMarquardt.h /usr/local/include/eigen3/unsupported/Eigen/src/NonLinearOptimization/chkder.h /usr/local/include/eigen3/unsupported/Eigen/src/NonLinearOptimization/covar.h /usr/local/include/eigen3/unsupported/Eigen/src/NonLinearOptimization/dogleg.h /usr/local/include/eigen3/unsupported/Eigen/src/NonLinearOptimization/fdjac1.h /usr/local/include/eigen3/unsupported/Eigen/src/NonLinearOptimization/lmpar.h /usr/local/include/eigen3/unsupported/Eigen/src/NonLinearOptimization/qrsolv.h /usr/local/include/eigen3/unsupported/Eigen/src/NonLinearOptimization/r1mpyq.h /usr/local/include/eigen3/unsupported/Eigen/src/NonLinearOptimization/r1updt.h /usr/local/include/eigen3/unsupported/Eigen/src/NonLinearOptimization/rwupdt.h /usr/local/include/eigen3/unsupported/Eigen/src/NumericalDiff/NumericalDiff.h /usr/local/include/eigen3/unsupported/Eigen/src/Polynomials/Companion.h /usr/local/include/eigen3/unsupported/Eigen/src/Polynomials/PolynomialSolver.h /usr/local/include/eigen3/unsupported/Eigen/src/Polynomials/PolynomialUtils.h /usr/local/include/eigen3/unsupported/Eigen/src/Skyline/SkylineInplaceLU.h /usr/local/include/eigen3/unsupported/Eigen/src/Skyline/SkylineMatrix.h /usr/local/include/eigen3/unsupported/Eigen/src/Skyline/SkylineMatrixBase.h /usr/local/include/eigen3/unsupported/Eigen/src/Skyline/SkylineProduct.h /usr/local/include/eigen3/unsupported/Eigen/src/Skyline/SkylineStorage.h /usr/local/include/eigen3/unsupported/Eigen/src/Skyline/SkylineUtil.h /usr/local/include/eigen3/unsupported/Eigen/src/SparseExtra/BlockOfDynamicSparseMatrix.h /usr/local/include/eigen3/unsupported/Eigen/src/SparseExtra/BlockSparseMatrix.h /usr/local/include/eigen3/unsupported/Eigen/src/SparseExtra/DynamicSparseMatrix.h /usr/local/include/eigen3/unsupported/Eigen/src/SparseExtra/MarketIO.h /usr/local/include/eigen3/unsupported/Eigen/src/SparseExtra/MatrixMarketIterator.h /usr/local/include/eigen3/unsupported/Eigen/src/SparseExtra/RandomSetter.h /usr/local/include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsArrayAPI.h /usr/local/include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsBFloat16.h /usr/local/include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsFunctors.h /usr/local/include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsHalf.h /usr/local/include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsImpl.h /usr/local/include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsPacketMath.h /usr/local/include/eigen3/unsupported/Eigen/src/SpecialFunctions/HipVectorCompatibility.h /usr/local/include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsArrayAPI.h /usr/local/include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsBFloat16.h /usr/local/include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsFunctors.h /usr/local/include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsHalf.h /usr/local/include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsImpl.h /usr/local/include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsPacketMath.h /usr/local/include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch /usr/local/include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX /usr/local/include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX512 /usr/local/include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/GPU /usr/local/include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/NEON /usr/local/include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX/BesselFunctions.h /usr/local/include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX/SpecialFunctions.h /usr/local/include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX512/BesselFunctions.h /usr/local/include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX512/SpecialFunctions.h /usr/local/include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/GPU/SpecialFunctions.h /usr/local/include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/NEON/BesselFunctions.h /usr/local/include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/NEON/SpecialFunctions.h /usr/local/include/eigen3/unsupported/Eigen/src/Splines/Spline.h /usr/local/include/eigen3/unsupported/Eigen/src/Splines/SplineFitting.h /usr/local/include/eigen3/unsupported/Eigen/src/Splines/SplineFwd.h ishtar@ubuntu:~/mbplanner_ws$
最新发布
07-10
### 关于Eigen库中的张量操作 在Eigen库中,`Eigen::DSizes<Eigen::DenseIndex, NDIMS>` 是用于定义固定大小维度的一个模板类[^1]。此结构通常被用来指定多维数组或张量的尺寸。 对于更广泛的张量运算支持,Eigen提供了专门的模块——Tensor模块。该模块允许执行高效的并行化计算,并且兼容多种硬件加速器如CUDA、SYCL等。下面是一些基本概念和用法: #### 创建张量对象 可以创建不同类型的张量对象来存储数据。最常用的方式是通过静态分配或者动态分配内存空间给定形状(shape)的张量。 ```cpp // 动态分配三维张量 Eigen::Tensor<float, 3> tensor(4, 5, 6); ``` #### 设置与获取元素值 可以直接访问单个元素的位置设置其数值,也可以批量赋值整个子区域内的所有元素。 ```cpp // 访问特定位置上的元素 tensor(0, 0, 0) = 1.0f; // 使用setConstant方法填充全部相同值 tensor.setConstant(2.0f); // 对某个切片应用函数 auto slice = tensor.chip<1>(0); // 获取第一个平面的数据 slice.device(my_device()) = slice * 2; ``` #### 执行算术运算和其他变换 除了简单的加减乘除外,还提供了一系列高级功能比如卷积、傅里叶变换等。 ```cpp // 定义另一个同样大小的张量作为输入B Eigen::Tensor<float, 3> B(4, 5, 6); B.setRandom(); // 将两个张量相加以获得C Eigen::Tensor<float, 3> C = A + B; // 应用快速傅立叶变换FFT到第三个轴上 C = C.fft(Eigen::array<int, 1>({2})); ``` 以上展示了如何利用Eigen Tensor模块来进行一些基础的操作。需要注意的是,在实际项目开发过程中应当查阅官方文档以获取最新特性说明以及最佳实践指南。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值