170 похожих чатов

Привет. Есть на питоне кусок кода: эта функция вызывается только для

функции f и вызывается с другими объектами типа torch::Tensor

def data_points(data):
'''
Wrapper for data points

'''
def middle(func):

def wrapper(*args, **kwargs):
return func(data, *args, **kwargs)
return wrapper

return middle
Функция, которая является аргументом
def f(t, p):
return p[0] * torch.exp(-t / p[1]) + p[2] * t * torch.exp(-t / p[3])
Второй аргумент - одномерный тензор
x_true = torch.linspace(0, 100, 25) # span of of free parameter
Вывод x_true:
tensor([ 0.0000, 4.1667, 8.3333, 12.5000, 16.6667, 20.8333, 25.0000,
29.1667, 33.3333, 37.5000, 41.6667, 45.8333, 50.0000, 54.1667,
58.3333, 62.5000, 66.6667, 70.8333, 75.0000, 79.1667, 83.3333,
87.5000, 91.6667, 95.8333, 100.0000])

Вызов функции:
modified_f = data_points(x_true)(f) # wrapped function (dependent on only parameters)
Вывод modified_f после выполнения:
tensor([ 59.7824, 287.5080, 483.8714, 652.0930, 795.0991, 915.5480,
1015.8528, 1098.2018, 1164.5790, 1216.7806, 1256.4327, 1285.0048,
1303.8247, 1314.0905, 1316.8820, 1313.1718, 1303.8341, 1289.6548,
1271.3375, 1249.5135, 1224.7472, 1197.5410, 1168.3440, 1137.5541,
1105.5253])

Как мне этот кусок кода перенести на с++? Начал так:
torch::linspace(0, 100, 25)

static torch::Tensor f(torch::Tensor t, torch::Tensor p) {
return p[0] * exp(-t / p[1]) + p[2] * t * exp(-t / p[3]);
}
В апи про torch::linspace
Creates a one-dimensional tensor of size steps whose values are evenly spaced from start to end, inclusive. That is, the value are:
start (float) – the starting value for the set of points

end (float) – the ending value for the set of points

steps (int) – size of the constructed tensor

Нужно правильно написать функцию, которая будет умножать (вроде бы) одномерный тензор на функцию f
Мне подсказали так, но мне нужно, чтобы был объект типа torch::Tensor, и при передачи в объект класса компилятор ругается на лямбду и код не работает

template <class Data>
auto data_points(Data data) {
auto middle{[data](auto func) {
return [data, func](auto... args) { return func(data, args...); };
}};

return middle;
}

1 ответов

28 просмотров
✨ Anatolii-Cherednichenko Автор вопроса

Там в чате по питону понимают в типах на с++, лямбах, плюсовых API?

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта