如何获取特征张量的 sqrt() 函数返回的标量值
How to get the scalar value returned by eigen tensor's sqrt() function
Eigen::Tensor<float, 1> linear(2);
linear.setValues({3,4});
auto linear_square = linear * linear;
auto linear_square_sum = linear_square.sum().sqrt();
std::cout<<linear_square_sum<<std::endl; // 5
auto new_linear = linear.constant(linear_square_sum);
std::cout<<new_linear<<std::endl; // expected: [5,5]
linear_square_sum
的期望值为 5。现在的目标是创建一个与 linear
大小相同的张量,这显示在最后两行代码中。不幸的是,关于特征张量常量函数中不匹配的C++类型存在一些错误,因为常量所需的参数类型是scalar(int,float)
。所以问题是我如何获得参数linear_square_sum
的标量值。如果有人教我如何更改最后两行代码,我将不胜感激。
如果您查看"常见陷阱"下的特征文档,您将看到为什么特征表达式模板样式类型不能很好地与auto
混合的解释。
因此,您应该明确拼写出类型。
但实际问题可能是linear_square_sum是一个"0 维张量",根据文档,它是标量的有效复制。但它与显式声明为浮点数的标量类型的linear
不匹配。
您可以使用不接受参数的operator()
重载访问"0 维张量"的底层标量。所以这是一个可能的解决方案。
using FTensor1 = Eigen::Tensor<float, 1>;
using FTensor0 = Eigen::Tensor<float, 0>;
FTensor1 linear(2);
linear.setValues({3,4});
FTensor1 linear_square = linear * linear;
FTensor0 linear_square_sum = linear_square.sum().sqrt();
std::cout<<linear_square_sum<<std::endl; // 5
auto new_linear = linear.constant(linear_square_sum());
std::cout<<new_linear<<std::endl; // expected: [5,5]
相关文章:
- 如果我重新定义 sqrt 函数,为什么使用 std::sqrt 失败?
- 如何获取特征张量的 sqrt() 函数返回的标量值
- CMake 无法检测 gcc 内置函数,如 sqrt、pow、exp 等
- C 查找无SQRT函数循环故障的平方根
- 为什么 Stroustrup 在 "The C++ Programming Language 3rd Edition (online)" 中定义了函数 sqrt?
- 在模板参数推导中,sqrt<T>(complex) 如何<T>匹配 sqrt<T>(<T>) 函数调用?
- 在C++中,为什么我不必包含任何内容来使用 sqrt() 函数?
- 为什么我调用CUDA数学库sqrt()函数失败
- C++sqrt函数的全平方精度
- C++ 没有与参数列表匹配的重载函数"sqrt"实例 - 试图查找结构类型的数字数组是否为完美平方
- 为什么我的非递归 sqrt 函数是递归的
- Visual Studio不允许我使用sqrt或floor,对重载函数的模糊调用
- 这是 sqrt 函数中的错误吗?
- 字符串参数的重载 sqrt 函数
- Sqrt 函数错误合并
- 在模板类中使用 sqrt() 函数时消除歧义
- 如何使用Dev C++检查数学库函数sqrt()中的代码
- std::sqrt()函数是如何工作的
- 使用sqrt()和pow()函数会产生不同的结果
- 从自定义sqrt函数捕获异常在c++中失败