我正在尝试使用Accelerate框架进行一维卷积。
我可以让它发挥作用,但经过几次实验后似乎出了问题。
这是我的代码:
import Accelerate
var N = 10000
var M = 10
var convN = N + M - 1
var xf = [Float](count:N, repeatedValue:0.0)
var yf = [Float](count:M, repeatedValue:0.0)
for i in 0..<N {
xf[i] = Float(i+1)
}
for i in 0..<M {
yf[i] = Float(i+1)
}
var outputf = [Float](count:convN, repeatedValue:0.0)
// padding zero
xf = [Float](count:convN-N, repeatedValue:0.0) + xf
var ptr_xf = UnsafePointer<Float>(xf)
var ptr_yf = UnsafePointer<Float>(yf).advancedBy(yf.count-1)
vDSP_conv(ptr_xf, 1, ptr_yf, -1, &outputf, 1, vDSP_Length(convN), vDSP_Length(M))
print("[Float]: \(outputf)")
我使用不同的N
和M
编译并运行它。
然后我用python包numpy
的结果检查结果。
有时它看起来很棒,但有时它会给我一些奇怪的结果,如:
(N
= 6,M
= 3)
Correct: [1.0, 4.0, 10.0, 16.0, 22.0, 28.0, 27.0, 18.0]
Result I get: [1.0, 4.0, 10.0, 16.0, 22.0, 28.0, 2.23692e+08, 4.47384e+08]
我在这里错过了吗? 我无法弄清楚我做错了什么。
答案 0 :(得分:0)
它与你的Swift版本有关吗?我使用的是V 3.0.2,以下代码适用于我。
NF