假设我有两个数据数组:
double data[4096] = { .... };
double b[3] = {.25, .5, .25};
我想要一个快速且可移植的卷积实现。使用 NumPy 语法
result = numpy.convolve(data, b, "same")
内核大小很小,为 3 或 5,我可能必须与带有零的内核进行卷积(可能为进一步优化提供范围)。
double b[5] = {.25, .0, .5, .0, .25};
我有一种感觉 Eigen C++ 已经为此优化了代码,但我不知道如何使用它。或者,是否有其他库具有可移植的卷积实现,并且针对常见平台进行了理想优化?
最佳答案
Armadillo应该可以满足您的需求。
Eigen 实现可能如下所示:
Eigen::VectorXd convolve(const Eigen::Ref<const Eigen::VectorXd>& in,
const Eigen::Vector3d& weights)
{
const Eigen::Index innersize = in.size() - 2;
Eigen::VectorXd out(in.size());
out.segment(1, innersize) =
in.head(innersize) * weights.x() +
in.segment(1, innersize) * weights.y() +
in.tail(innersize) * weights.z();
// Treat borders separately
return out;
}
以同样的方式展开 5 个重量。
关于c++ - 使用 Eigen C++ 进行快速一维卷积?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72360602/