gpt4 book ai didi

swift - 如何将 float 组平滑插入到更大的数组中?

转载 作者:行者123 更新时间:2023-12-03 09:17:29 26 4
gpt4 key购买 nike

我被 Swift 中的插值卡住了。任何人都可以帮助我吗?
我想将浮点数组(比如 [0, 0, 100, 25, 0, 0, 0, 25, 0, 0, 0] )插入另一个具有给定大小的数组(例如 128 )。我找到了一篇文章( Use Linear Interpolation to Construct New Data Points ),它显示了如何实现这些东西。
有两种方法(您可以在下面看到结果,它们的表现如何):

  • 使用 vDSP_vgenp 的线性插值和
  • 使用 vDSP_vlint 更平滑(但不是为了我的目的)插值

  • 问题是这两种技术都没有实现我的期望,这在 Screenshot 3 中有说明。 .如何使插值分布更平滑?我想看 立方体曲线 .
    初始情节:
    Screenshot 1
    线性插值:
    import Accelerate

    let n = vDSP_Length(128)
    let stride = vDSP_Stride(1)

    let values: [Float] = [0, 0, 100, 25, 0, 0, 0, 25, 0, 0, 0]
    let indices: [Float] = [0, 11, 23, 34, 46, 58, 69, 81, 93, 104, 116]

    var result = [Float](repeating: 0, count: Int(n))

    vDSP_vgenp(values, stride, indices, stride, &result, stride, n, vDSP_Length(values.count))
    Screenshot 2
    平滑插值:
    import Accelerate
    import AVFoundation

    let n = vDSP_Length(1024)
    let stride = vDSP_Stride(1)

    let values: [Float] = [0, 0, 100, 25, 0, 0, 0, 25, 0, 0, 0]
    let denominator = Float(n) / Float(values.count - 1)

    let control: [Float] = (0 ... n).map {
    let x = Float($0) / denominator
    return floor(x) + simd_smoothstep(0, 1, simd_fract(x))
    }

    var result = [Float](repeating: 0, count: Int(n))

    vDSP_vlint(values, control, stride, &result, stride, n, vDSP_Length(values.count))
    Screenshot 3

    最佳答案

    在我看来,vDSP_vqint二次插值函数可以解决这个问题。见 https://developer.apple.com/documentation/accelerate/1449942-vdsp_vqint 处的讨论.

    关于swift - 如何将 float 组平滑插入到更大的数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63796458/

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