如何在C++中编写 MATLAB fix(X) 函数?

How to code the MATLAB fix(X) function in C++?

本文关键字:fix 函数 MATLAB C++      更新时间:2023-10-16

基本上,我想在C++代码中重新创建一个 MATLAB 脚本,我注意到该脚本使用了一个fix(X)函数,该函数将X的每个元素舍入到最接近的整数零。任何关于初学者应该如何开始的建议将不胜感激!

例如:

X = [-1.9 -3.4; 1.6 2.5; -4.5 4.5]
X = 
-1.9000  -3.4000
1.6000   2.5000
-4.5000  4.5000
Y = fix(X)
Y = 
-1   -3
1    2
-4   4

假设X是一个std::vector<double>,你可以做这样的事情:

std::transform(
X.begin,
X.end(),
X.begin(),
[](auto& elem) { elem = static_cast<int>(elem); }
);

编辑:正如@walnut所指出的,您需要记住,int可能会溢出。std::trunc,是更安全的选择。

对于通用的 2D/3D 数组,不建议使用std::vector秒的std::vector,您应该尝试特征库。它提供了与 Matlab 类似的 API。

#include <iostream>
#include <algorithm>
#include <vector>
int main()
{
std::vector<double> nums{3.25, -4.5, 2.4, 9, -15.4, 267.4};
std::for_each(nums.begin(), nums.end(), [](double &n){ std::cout << n << " "; });
std::cout << std::endl;
std::for_each(nums.begin(), nums.end(), [](double &n){ std::cout << std::trunc(n) << " "; });
return 0;
}