gpt4 book ai didi

f# - 如何在 F# 中进行卷积?

转载 作者:行者123 更新时间:2023-12-04 22:09:21 25 4
gpt4 key购买 nike

我想要 convolve 一个带有离散滤波器的离散信号。信号和过滤器是 F# 中的浮点序列。

我能弄清楚如何做到这一点的唯一方法是使用两个嵌套的 for 循环和一个可变数组来存储结果,但它感觉不是很实用。

这是我将如何做到非功能性:

conv = double[len(signal) + len(filter) - 1]
for i = 1 to len(signal)
for j = 1 to len(filter)
conv[i + j] = conv[i + j] + signal(i) * filter(len(filter) - j)

最佳答案

试试这个功能:

let convolute signal filter =
[|0 .. Array.length signal + Array.length filter - 1|] |> Array.map (fun i ->
[|0 .. i|] |> Array.sum_by (fun j -> signal.[i] * filter.[Array.length filter - (i - j) - 1]))

这可能不是最好的功能解决方案,但它应该可以完成这项工作。我怀疑是否存在一种纯粹的功能性解决方案,可以与速度的必要解决方案相匹配。

希望有帮助。

注意:该函数目前未经测试(尽管我已经确认它可以编译)。让我知道它是否没有完全按照它应该做的。另外,请注意 ij 变量与您的原始帖子所指的内容不同。

关于f# - 如何在 F# 中进行卷积?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/803055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com