gpt4 book ai didi

c++ - 计算 Eigen::Matrix 的 sign() 的最佳方法

转载 作者:行者123 更新时间:2023-11-28 00:07:31 32 4
gpt4 key购买 nike

由于 Eigen C++ 库不包含用于计算矩阵的 sign(x) 的内置方法,因此我正在寻找执行此操作的最佳方法。有关 sign() 的定义,请参阅 Matlab documentation ,虽然我真的不需要 0 元素的情况。我想出的方法如下。

Eigen::MatrixXf a = Eigen::MatrixXf(2,2);
a << -0.5, 1.0,
0.3, -1.4;

// Temporary objects containing 1's and -1's
const Eigen::MatrixXi pos = Eigen::MatrixXi::Ones(a.rows(), a.cols());
const Eigen::MatrixXi neg = Eigen::MatrixXi::Ones(a.rows(), a.cols()) * -1;

// Actually filling of the matrix sign(a)
Eigen::MatrixXi a_sign = (a.array() >= 0).select(pos, neg);

std::cout << a << std::endl << std::endl;
std::cout << a_sign << std::end;

这是可行的,所以输出由

-0.5    1
0.3 -1.4

-1 1
1 -1

但是我想知道是否有更好的方法来做到这一点?创建两个临时矩阵看起来很麻烦,并且在处理非常大的矩阵时会变得相当慢。

最佳答案

怎么样

 X = X.array().sign();

关于c++ - 计算 Eigen::Matrix 的 sign() 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34675822/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com