Я написал код для линейной интерполяции огромного количества значений. Matlab способен выполнять интерполяцию очень быстро, но мой код на C++ занимает гораздо больше времени. Что я могу сделать по-другому, чтобы код работал быстрее?
int nearestNeighbourIndex(std::vector& x,double &value)
{
double dist;
int idx;
int i;
double newDist;
idx = -1;
dist = 999;//This is an absurdly large number meant to be replaced on
//the first iteration of the for loop
for ( i = 0; i < x.size(); i++ ) {
newDist = std::abs(value - x.at(i));
if ( newDist < dist ) {
dist = newDist;
idx = i;
}
}
return idx;
}
std::vector interpolate(std::vector x,std::vector v, std::vectorLinearSpaced){
std::vector v_new;
double dx, dv, m, b;
size_t x_max_idx = x.size() - 1;
size_t x_new_size = LinearSpaced.size();
v_new.reserve(x_new_size);
for (size_t i = 0; i < x_new_size; ++i)
{
size_t idx = nearestNeighbourIndex(x, LinearSpaced);
if (x[idx] > LinearSpaced)
{
dx = idx > 0 ? (x[idx] - x[idx - 1]) : (x[idx + 1] - x[idx]);
dv = idx > 0 ? (v[idx] - v[idx - 1]) : (v[idx + 1] - v[idx]);
}
else
{
dx = idx < x_max_idx ? (x[idx + 1] - x[idx]) : (x[idx] - x[idx - 1]);
dv = idx < x_max_idx ? (v[idx + 1] - v[idx]) : (v[idx] - v[idx - 1]);
}
m = dv / dx;
b = v[idx] - x[idx] * m;
v_new.push_back(LinearSpaced * m + b);
}
return v_new;
}
Подробнее здесь: https://stackoverflow.com/questions/784 ... ation-in-c
Как создать наиболее эффективную линейную интерполяцию в С++? ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1715800399
Anonymous
Я написал код для линейной интерполяции огромного количества значений. Matlab способен выполнять интерполяцию очень быстро, но мой код на C++ занимает гораздо больше времени. Что я могу сделать по-другому, чтобы код работал быстрее?
int nearestNeighbourIndex(std::vector& x,double &value)
{
double dist;
int idx;
int i;
double newDist;
idx = -1;
dist = 999;//This is an absurdly large number meant to be replaced on
//the first iteration of the for loop
for ( i = 0; i < x.size(); i++ ) {
newDist = std::abs(value - x.at(i));
if ( newDist < dist ) {
dist = newDist;
idx = i;
}
}
return idx;
}
std::vector interpolate(std::vector x,std::vector v, std::vectorLinearSpaced){
std::vector v_new;
double dx, dv, m, b;
size_t x_max_idx = x.size() - 1;
size_t x_new_size = LinearSpaced.size();
v_new.reserve(x_new_size);
for (size_t i = 0; i < x_new_size; ++i)
{
size_t idx = nearestNeighbourIndex(x, LinearSpaced[i]);
if (x[idx] > LinearSpaced[i])
{
dx = idx > 0 ? (x[idx] - x[idx - 1]) : (x[idx + 1] - x[idx]);
dv = idx > 0 ? (v[idx] - v[idx - 1]) : (v[idx + 1] - v[idx]);
}
else
{
dx = idx < x_max_idx ? (x[idx + 1] - x[idx]) : (x[idx] - x[idx - 1]);
dv = idx < x_max_idx ? (v[idx + 1] - v[idx]) : (v[idx] - v[idx - 1]);
}
m = dv / dx;
b = v[idx] - x[idx] * m;
v_new.push_back(LinearSpaced[i] * m + b);
}
return v_new;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78485942/how-do-i-create-the-most-efficient-linear-interpolation-in-c[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия