App*_*per 5 c++ performance normalization
我想知道如何在 C++ 中有效地标准化向量。到目前为止,这就是我所拥有的。有没有办法提高效率和/或一次性完成。
std::array<float, MyClass::FEATURE_LENGTH> MyClass::normalize(const std::array<float, FEATURE_LENGTH>& arr) {
std::array<float, MyClass::FEATURE_LENGTH> output{};
double mod = 0.0;
for (size_t i = 0; i < arr.size(); ++i) {
mod += arr[i] * arr[i];
}
double mag = std::sqrt(mod);
if (mag == 0) {
throw std::logic_error("The input vector is a zero vector");
}
for (size_t i = 0; i < arr.size(); ++i) {
output[i] = arr[i] / mag;
}
return output;
}
Run Code Online (Sandbox Code Playgroud)
有很多方法可以优化该算法的实现,具体取决于问题的具体情况。
此外,通过将操作与规范化融合,您可以获得更快的代码。假设您想要将两个向量相加并对结果进行归一化。您可以一次性计算它们的总和及其大小,然后在一秒钟内进行缩放。
| 归档时间: |
|
| 查看次数: |
32036 次 |
| 最近记录: |