eigen 相关问题

Eigen是线性代数的C ++模板库:矩阵,向量和相关算法。

CMake 无法在 Windows github actions 上构建 eigen

嗯,我正在开发一个 C++ 项目,其中使用 Eigen 的线性代数。 这是我从根 CmakeLists.txt 获取 Eigen 库的方法: 消息([状态]“正在获取特征值。”) 块(

回答 1 投票 0

将特征向量中的元素转换为相应元素的某个常数

我是 Eigen 库的新手。我想将向量(或矩阵)中的每个元素转换为向量中相应元素的某个常数。 我想做这个手术有效...

回答 1 投票 0

将向量中的元素转换为相应元素的某个常数

我正在使用 Eigen 库。我想将向量中的每个元素转换为向量中相应元素的幂的某个常数。我想有效地做到这一点,我想避免

回答 1 投票 0

如何从模板类获取参数值

为了方便起见,我使用 Eigen::Matrix 定义了 1d、2d、3d 和 4d 向量。 命名空间 MyNamespace { 模板 使用 Vec = Eigen::Matrix 为了方便起见,我使用 Eigen::Matrix 定义了 1d、2d、3d 和 4d 向量。 namespace MyNamespace { template <class scalar_t, int dim> using Vec = Eigen::Matrix<scalar_t, dim, 1, Eigen::ColMajor | Eigen::AutoAlign, dim, 1>; typedef Vec<double, 1> Vec1d; // Convenience typedef for 1d vector of doubles. typedef Vec<double, 2> Vec2d; // Convenience typedef for 2d vector of doubles. typedef Vec<double, 3> Vec3d; // Convenience typedef for 3d vector of doubles. typedef Vec<double, 4> Vec4d; // Convenience typedef for 4d vector of doubles. } 然后我定义了一个模板类,它应该能够将维度 dim 存储为可枚举: namespace MyNamespace { /** * A class representing Monomial basis. */ template <typename vec_t> class Monomials { public: typedef vec_t vector_t; ///< Vector type. /// Store dimension of the domain. enum { /** Dimensionality of the domain. */ dim = vec_t::dim }; public: /** * Construct a basis of all monomials */ Monomials(int order){ printf("order: %d", order); printf("dimension: %d", vec_t::dim); // < ------ I want this! }; }; } 但是,这无法编译(可在此处重现:https://godbolt.org/z/ro7fn6o3f) using namespace MyNamespace; int main(){ auto p = Vec2d{0.0, 1.0}; printf("%f, %f\n", p[0], p[1]); auto m = Monomials<Vec2d>(2); return 0; } 相反,我收到一条错误消息 <source>:21:62: error: 'dim' is not a member of 'Eigen::Matrix<double, 2, 1>' 应该如何运作? 我想要的基本上就是获得某种 Vec2d::dim 功能,这将返回给定向量的维度,在本例中为 2。

回答 0 投票 0

将变换应用于包含特征向量的矩阵的更短方法?

是否有更短的方法来应用变换? 自动向量=矩阵(); //每行的向量。 仿射3f变换=...; // 一些 Affine3 变换 对于 (int r = 0; r < vecs...

回答 3 投票 0

GPU 和 CPU 之间矩阵乘法的性能差异:Eigen 与 ViennaCL

在 C++ 中使用 Eigen 和 ViennaCL 库执行矩阵乘法运算时,我遇到性能问题。我正在比较在

回答 1 投票 0

Eigen C++ 对列进行除法运算

我有一个矩阵 df,我试图按其他两列的比例填充最后一列,如下所示: df.col(0) = df.col(1).rowwise() / (df.col(1) + df.col(2)); 但我收到错误: 错误:没有类型...

回答 1 投票 0

使用 -O2 编译时,Eigen::Vector2f 未正确初始化

我遇到了一个问题,即如果 Eigen::Vector2f 与其他操作一致初始化并编译,则该 Eigen::Vector2f 未正确初始化。带有 -O2 标志。 主程序 #包括 #inc...

回答 1 投票 0

Eigen::Matrix 中的 cuda::std::complex 导致错误

使用 nvcc eigen_complex.cu -I [eigen 的路径] 编译时,下面的代码会导致以下错误,其中 nvcc 的版本为 12.4,Eigen 的版本为最新版本。有没有办法让我defi...

回答 1 投票 0

比较两个网格 c++“libigl”

我想通过使用诽谤和特征来比较第一个网格与第二个网格的节点和面的相似性 我怎样才能做到呢? 我不知道如何开始 如果你知道的话请...

回答 1 投票 0

使用导数对特征样条进行插值

我正在尝试使用指定的开始和结束导数来插值三次样条。 为此,我为特征样条创建了一个包装器: /** * 三次样条。 * @tparam vec_t 点类型。示例:Eigen::Ve...

回答 1 投票 0

什么时候建议不要使用 Eigen::Ref 作为参数?

我目前正在编写很多接受块和表达式作为输入的函数。我通常发现使用 Refs 更容易,因为它们简单、轻量级,而且也很容易确保...

回答 1 投票 0

Eigen 中三元运算符输入错误

我正在用 C++ 编写一个类来概括两个稀疏矩阵求解器(SparseLU 和 Sparse Cholesky)。当我尝试使用三元运算符时,它说操作数类型不兼容,但如果我使用...

回答 2 投票 0

使用 auto 和 Eigen 会得到错误的结果

在对两个向量求和时,使用 auto 和使用 Vector 得到了不同的结果。 我的代码: #include“stdafx.h” #包括 #include "D: xternals igen_3_1_2\include\Eigen\Geometry" 你...

回答 2 投票 0

Eigen:评估从常量矩阵到新矩阵/数组的运算

假设我有一个根据 Eigen 文档模板化的函数,以便使用 pybind11 从 C++ 和 Python 中使用它。 该函数的主要目标是执行笛卡尔 -> ...

回答 1 投票 0

如何加速三角形与AABB的相交测试

我正在学习三角形网格体素化的算法,其中涉及测试三角形和AABB之间的交集。我在网上找到了分离轴定理或SAT算法,w...

回答 0 投票 0

如何对类的特征向量的属性求和

我已经声明了我创建的类的向量,如下所示: typedef Eigen::Vector VectorT; 我正在尝试对滚动的交易窗口求和。金额 从 std::vec 切换之前...

回答 1 投票 0

C++ 中特征矩阵的并行填充

假设我正在尝试用另一个 MatrixXf 的滚动平均值填充 MatrixXf,如下所示 MatrixXf ComputeRollingMean(const MatrixXf& features) { MatrixXf df(features.rows() - 30,

回答 1 投票 0

使用 Eigen 和 FFTW 进行二维傅里叶变换

我正在尝试使用 FFTW 进行实值二维傅里叶变换。我的数据存储在动态大小的特征矩阵中。这是我写的包装类: FFT2D.h: #包括 FFT2 类...

回答 2 投票 0

避免在特征值中使用对角矩阵进行分配

问题 如何避免特征中小对角矩阵的动态分配? 语境 我正在使用本征 3.4。我有一个 N × N 对角矩阵 W: 自动 W = 本征::对角矩阵 问题 如何避免 Eigen 中小对角矩阵的动态分配? 背景 我正在使用 Eigen 3.4。我有一个 N × N 对角矩阵 W: auto W = Eigen::DiagonalMatrix<double, Dynamic>(N); 如果 N <= 512 by using a buffer on the stack:我想避免分配 double W_buffer[512]; 对于法向量和矩阵,我知道我可以使用Map: double y_buff[512]; auto y = Eigen::Map<VectorXd>( y_buff, N ); 但是,当我对对角矩阵尝试相同的操作时,它会给我一个错误,因为 InnerStrideAtCompileTime 不是 Eigen::DiagonalMatrix 的成员。 将 Map 与 DiagonalMatrix 结合使用时出现错误消息 In file included from eigen/Eigen/Core:311, from eigen/Eigen/Dense:1, from build/release/CMakeFiles/bench.dir/cmake_pch.hxx:5, from <command-line>: eigen/Eigen/src/Core/Map.h: In instantiation of ‘struct Eigen::internal::traits<Eigen::Map<Eigen::DiagonalMatrix<double, -1> > >’: eigen/Eigen/src/Core/util/ForwardDeclarations.h:34:48: required from ‘struct Eigen::internal::accessors_level<Eigen::Map<Eigen::DiagonalMatrix<double, -1> > >’ eigen/Eigen/src/Core/util/ForwardDeclarations.h:101:75: required from ‘class Eigen::Map<Eigen::DiagonalMatrix<double, -1> >’ include/volar/estimators.hpp:203:18: required from ‘static volar::R volar::PolyLE<Degree>::estimate(volar::R, volar::ViewR, volar::ViewR, const Kernel&) [with Kernel = volar::UniformK; int Degree = 1; volar::R = double; volar::ViewR = volar::View<double>]’ include/volar/kernel_smoothing.hpp:81:64: required from ‘volar::R volar::LocalRFT<Estimator, Kernel>::operator()(volar::R) const [with Estimator = volar::EigenLinearLE; Kernel = volar::UniformK; volar::R = double]’ bench/core.cpp:43:23: required from ‘void localRF(benchmark::State&) [with Method = volar::EigenLinearLE; Kernel = volar::UniformK]’ bench/core.cpp:96:1: required from here eigen/Eigen/src/Core/Map.h:30:53: error: ‘InnerStrideAtCompileTime’ is not a member of ‘Eigen::DiagonalMatrix<double, -1>’ 30 | ? int(PlainObjectType::InnerStrideAtCompileTime) | ^~~~~~~~~~~~~~~~~~~~~~~~ In file included from eigen/Eigen/Core:163, from eigen/Eigen/Dense:1, from build/release/CMakeFiles/bench.dir/cmake_pch.hxx:5, from <command-line>: Eigen::DiagonalMatrix的第三个模板参数,MaxSizeAtCompileTime可以让你做到这一点。 与 Eigen::Dynamic 结合使用时,DiagonalMatrix 将具有足够大的内部缓冲区以容纳 MaxSizeAtCompileTime,但其大小仍会动态调整。 例如,以下内容相当于您尝试使用外部缓冲区执行的操作: auto W = Eigen::DiagonalMatrix<double, Eigen::Dynamic, 512>(N) 显然,尝试使用大于 MaxSizeAtCompileTime 的大小来初始化它会在运行时失败(使用断言),但这并不比使用 Map 时必须处理的情况更糟糕。 您可以按照您描述和使用 Map 方法的“正常”方式进行操作,而不是尝试 DiagonalMatrix asDiagonal()。 可能稍微不太干净,必须输入 y.asDiagonal() 而不是仅仅 y...也许你可以用 Eigen::Ref 做一些事情来保留对来自向量的对角矩阵的引用,但我不确定是否那会起作用的。 asDiagonal(): https://eigen.tuxfamily.org/dox/classEigen_1_1MatrixBase.html#a14235b62c90f93fe910070b4743782d0

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.