我有一个来自RGB图像的浮动数组,我想将它除以255。我希望它尽可能快,我尝试使用vDSP操作。但是,输出不匹配。
我尝试了以下几点:
///Image vectors: imageFloatArray1 == imageFloatArray2 == imageFloatArray3
let numSamples = width * height * 3;
var factor : Float = 255.0
var scaledFloats1: [Float] = Array(repeating: 0.0, count: numSamples)
var scaledFloats2: [Float] = Array(repeating: 0.0, count: numSamples)
var scaledFloats3: [Float] = Array(repeating: 0.0, count: numSamples)
//Case 1: Original approach however too slow
scaledFloats1 = imageFloatArray1.map{$0 / factor}
//Case 2: vDSP.divide
scaledFloats2 = vDSP.divide(imageFloatArray2, factor)
//Case 3: vDSP_vsdiv
vDSP_vsdiv(&imageFloatArray3, 1, &factor, &scaledFloats3, 1, vDSP_Length(numSamples))
/// Output all have same size but case 2 and 3 output values differ from case 1有人能解释这事是不是真的发生了吗?如果是的话,是否有任何更快的替代方案来替代第一种情况?
map和vsdiv之间10个不同值的样本输出:
"different values count: " 96892 /// of 196608 values
"map value: 0.23529411852359771728515625000000"
"vsdiv value: 0.23529413342475891113281250000000"
"map value: 0.19215686619281768798828125000000"
"vsdiv value: 0.19215688109397888183593750000000"
"map value: 0.11372549086809158325195312500000"
"vsdiv value: 0.11372549831867218017578125000000"
"map value: 0.24705882370471954345703125000000"
"vsdiv value: 0.24705883860588073730468750000000"
"map value: 0.22745098173618316650390625000000"
"vsdiv value: 0.25490197539329528808593750000000"
"map value: 0.19215686619281768798828125000000"
"vsdiv value: 0.16862745583057403564453125000000"
"map value: 0.22352941334247589111328125000000"
"vsdiv value: 0.22745099663734436035156250000000"
"map value: 0.09411764889955520629882812500000" <- big difference
"vsdiv value: 0.26666668057441711425781250000000" <-
"map value: 0.22745098173618316650390625000000"
"vsdiv value: 0.19215688109397888183593750000000"
"map value: 0.23529411852359771728515625000000"
"vsdiv value: 0.25490197539329528808593750000000"发布于 2022-10-26 15:07:00
你表现出来的差异太小了,不用担心。我做了一些谷歌搜索,看起来浮动大约有6位数的精确性。在噪音中,你的答案是不同的。这种差异很可能是由于底层二进制数学算法的不同实现造成的。
https://stackoverflow.com/questions/74208768
复制相似问题