展开恒定数量的参数
Unfolding Constant Amount Of Arguments
本文关键字:参数 更新时间:2023-10-16
我想为一个在C++上有 5 个参数的函数编写一个简单的梯度下降。现在我偶然发现了一个实现模型问题:我是否应该牺牲速度来折叠我的参数在向量/数组中。这就是我的意思。我可以像这样实现功能值和梯度计算:
double function(double arg1, double arg2, ..., double arg5);
double functionGradient1(double arg1, double arg2, ..., double arg5);
double functionGradient2(double arg1, double arg2, ..., double arg5);
...
double functionGradient5(double arg1, double arg2, ..., double arg5);
或:
double function(double * args);
double functionGradientAt(double * args, int i);
最后一个更容易实现,但是如果我要不断分配/释放内存,恐怕我会失去很多速度。
我的问题是:
- 你会选择哪一个?
- 如果您曾经实施过梯度下降,您如何处理这种情况?
你会选择哪一个?
我会选择:
double function(const vector<double> &args);
或者,如果它必须来自您的示例,那么:
double function(double * args);
原因是我不相信展开这样的参数会增加任何明显的加速,但它确实使代码看起来很丑陋。
如果您曾经实施过梯度下降,您如何处理这种情况?
我用向量处理了它。
梯度下降的速度可能更多地取决于您执行的迭代次数,而不是您传递这些参数的方式。如果你想尽可能快,我建议不要自己实现它,而是找到一个已经实现它的库。这个问题对此有很多很好的建议。
在这两种情况下:double functionGradient5(double arg1, double arg2, ..., double arg5);以及双功能(双*参数);您可能需要分配相同数量的内存。第一个解决方案将在堆中分配内存,在第二个解决方案中,您必须自己处理它,因此对您来说不太方便,但另一方面,您将能够迭代参数,因此在某些情况下可能会更好。
相关文章:
- 如何反转整数参数包
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数调用中参数的顺序重要吗
- 部分定义/别名模板模板参数
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 使用不带参数的函数访问结构元素
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何使用Luacneneneba API正确读取字符串和表参数
- 在派生函数中指定void*参数
- 视图中的参数推导失败:take_while
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- 使用指向成员的指针将成员函数作为参数传递
- 没有名称的C++模板参数
- 如何将enable-if与模板参数和参数包一起使用