我有一个指向浮点数组的指针:arr = [a0, a1, a2, a3, ..., an]
。我希望结果是:result = [a0+a1, a0+a1, a2+a3, a2+a3, a4+a5, a4+a5, ...]
. 现在我用map()
函数来做:
let multiArrayValue: MLMultiArray = someMulityArray
let pointer = (multiArrayValue.dataPointer).bindMemory(to: Float.self, capacity: multiArrayValue.count)
let sums = (0..<multiArrayValue.count/2).map { (index) -> [Float] in
let sum = pointer[index * 2] + pointer[index * 2 + 1]
return [sum, sum]
}.flatMap { $0 }
Accelerate
如何使用框架以有效的方式做到这一点?
编辑:
我确实设法得到res = [a0+a1, a2+a3, a4+a5, ..., an+an]
:
let k = multiArrayValue.count/2
let n = vDSP_Length(k)
var res = [Float](repeating: 0, count: k)
vDSP_vadd(&pointer, vDSP_Stride(2),
&pointer+1, vDSP_Stride(2),
&res, vDSP_Stride(1),
n)
所以现在剩下的问题是如何Accelerate
获得重复值:[a1, a2, a3, ... an] => [a1, a1, a2, a2, ..., an, an]