Swift Accelerate for Mean&标准偏差 [英] Swift Accelerate for Mean & Standard Deviation

查看:101
本文介绍了Swift Accelerate for Mean&标准偏差的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在研究Accelerate以在Swift中计算数组的均值和标准差。

I am looking at Accelerate to compute mean and standard deviation of arrays in Swift.

我可以做均值。我如何做标准偏差?

I can do the mean. How do I do the standard deviation?

let rr: [Double] = [ 18.0, 21.0, 41.0, 42.0, 48.0, 50.0, 55.0, 90.0 ]

var mn: Double = 0.0

vDSP_meanvD(rr, 1, &mn, vDSP_Length(rr.count))

print(mn) // prints correct mean as 45.6250

// Standard Deviation should be 22.3155


推荐答案

您可以计算平均值的标准差,以及
的均方值(比较 https://en.wikipedia.org/wiki/Standard_deviation#Identities_and_mathematical_properties https://zh.wikipedia.org/wiki/Algebraic_formula_for_the_variance ):

You can compute the standard deviation from the mean value and the mean square value (compare https://en.wikipedia.org/wiki/Standard_deviation#Identities_and_mathematical_properties and https://en.wikipedia.org/wiki/Algebraic_formula_for_the_variance):

import Accelerate

let rr: [Double] = [ 18.0, 21.0, 41.0, 42.0, 48.0, 50.0, 55.0, 90.0 ]

var mn: Double = 0.0 // mean value
vDSP_meanvD(rr, 1, &mn, vDSP_Length(rr.count))

var ms: Double = 0.0 // mean square value
vDSP_measqvD(rr, 1, &ms, vDSP_Length(rr.count))

let sddev = sqrt(ms - mn * mn) * sqrt(Double(rr.count)/Double(rr.count - 1))

print(mn, sddev)
// 45.625 22.315513501982

或者(对于iOS 9.0和更高版本或macOS 10.11和更高版本),使用 vDSP_normalizeD

Alternatively (for iOS 9.0 and later or macOS 10.11 and later), use vDSP_normalizeD:

var mn = 0.0
var sddev = 0.0
vDSP_normalizeD(rr, 1, nil, 1, &mn, &sddev, vDSP_Length(rr.count))
sddev *= sqrt(Double(rr.count)/Double(rr.count - 1))

print(mn, sddev)
// 45.625 22.315513501982

这篇关于Swift Accelerate for Mean&标准偏差的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆