Как кодировать функцию MATLAB fix (X) в C ++? - PullRequest
0 голосов
/ 02 декабря 2019

В основном я хотел бы воссоздать скрипт MATLAB в коде C ++, и я заметил, что скрипт использует функцию 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

Ответы [ 2 ]

4 голосов
/ 02 декабря 2019

Предполагая, что X является std::vector<double>, вы можете сделать что-то вроде этого:

for(auto& element : X)
{
  element = static_cast<int>(element);
}

Редактировать: Как указал @walnut, вы должны иметь в виду, что int можетпереполнение. std::trunc, более безопасный вариант.

Для универсальных 2D / 3D-массивов не рекомендуется использовать std::vector из std::vector, вам следует попробовать Eigen библиотека. Он предоставляет API, аналогичный Matlab.

0 голосов
/ 05 декабря 2019
#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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...