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 ответов

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

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

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта