从矢量标量线性代数函数(来自vectorOps.h) https://developer.apple.com/reference/accelerate/1546030-visamax
func vIsamax(_ count:Int32, _ x:OpaquePointer) - > Int32)已
计数 向量x中的元素数量;必须是4的倍数。
x浮点值的向量数组。
我尝试过的解决方案
https://swift.org/migration-guide/se-0107-migrate.html
UnsafeRawPointer
,withUnsafePointer
,MemoryLayout
等
至今尚未成功
无法使用... CFData,
调用类型'OpaquePointer'的初始值设定项不能用...... yada,yada,yada调用“”
如何使用OpaquePointer调用DSP函数?
答案 0 :(得分:1)
vIsamax
将vFloat
又名float4
元素的向量作为参数。
(每个float4
包含4个浮点数。)
C声明是
int32_t vIsamax(int32_t count, const vFloat *x);
将 映射到Swift
public func vIsamax(_ count: Int32, _ x: UnsafePointer<vFloat>) -> Int32
而不是
public func vIsamax(_ count: Int32, _ x: OpaquePointer) -> Int32
但您可以简单地传递vFloat
/ float4
数组,如下所示
小例子:
import Swift
import Accelerate
import simd
let values = [ float4(-1.0, -2.0, -3.0, -4.0), float4(4.0, 3.0, 2.0, 1.0) ]
let idx = vIsamax(Int32(4 * values.count), values)
print(idx) // 3