NSArray
がNSNumber
のオブジェクトの場合、配列の数値の標準偏差はどのように計算されますか?Obj-C:NSNumberオブジェクトのNSArrayの標準偏差を計算しますか?
11
A
答えて
23
それは、二重の長さの山車としてすべてNSNumbersを処理しても安全です(だからと仮定すると、 「可能性がありますが、そこでの範囲の両極端で、いくつかの64ビット整数を持っている場合、一部の精度を失うLL)と私が正しく式最初の実装を思い出しました:
- (NSNumber *)meanOf:(NSArray *)array
{
double runningTotal = 0.0;
for(NSNumber *number in array)
{
runningTotal += [number doubleValue];
}
return [NSNumber numberWithDouble:(runningTotal/[array count])];
}
- (NSNumber *)standardDeviationOf:(NSArray *)array
{
if(![array count]) return nil;
double mean = [[self meanOf:array] doubleValue];
double sumOfSquaredDifferences = 0.0;
for(NSNumber *number in array)
{
double valueOfNumber = [number doubleValue];
double difference = valueOfNumber - mean;
sumOfSquaredDifferences += difference * difference;
}
return [NSNumber numberWithDouble:sqrt(sumOfSquaredDifferences/[array count])];
}
0
使用できるアルゴリズムにはlinkがあります。私は組み込みのObjective C統計ライブラリを知らないので、アルゴリズムを自分で実装するだけです。リンクはJavaで行いますが、変換は簡単です。
0
これにはRosetta Codeにいくつかの良いコードがあります。 (彼らは彼らの例では持っているように代わりにC配列の)あなたにNSArrayを通過するには、ちょうどSDAccumのその実施に伴い、このコードを使用します。
- (double)computeStandardDeviationWithArray:(NSArray *)numberArray
{
double sd;
SDAccum *sdacc = [[SDAccum alloc] init];
for(NSNumber *aNumber in numberArray)
{
sd = [sdacc value: [aNumber doubleValue]];
}
[sdacc release];
return sd;
}
0
ここで私は別のバージョンである」は、以前は何度か使用されていました。
NSArray *numbers = [NSArray arrayWithObjects:[NSNumber numberWithInt:...],
[NSNumber numberWithInt:...],
[NSNumber numberWithInt:...], nil];
// Compute array average
int total = 0;
int count = [numbers count];
for (NSNumber *item in numbers) {
total += [item intValue];
}
double average = 1.0 * total/count;
// Sum difference squares
double diff, diffTotal = 0;
for (NSNumber *item in numbers) {
diff = [item doubleValue] - average;
diffTotal += diff * diff;
}
// Set variance (average from total differences)
double variance = diffTotal/count; // -1 if sample std deviation
// Standard Deviation, the square root of variance
double stdDeviation = sqrt(variance);
24
NSExpression
組み込み関数を使用できます。
NSArray *numbers = @[@1, @2, @3, @4, @5, @6, @7, @8];
NSExpression *expression = [NSExpression expressionForFunction:@"stddev:" arguments:@[[NSExpression expressionForConstantValue:numbers]]];
NSNumber *value = [expression expressionValueWithObject:nil context:nil];
NSLog(@"%@,", value); // => 2.29128...
詳細については、公式documentationと、このNSHipster articleを確認してください。
1
ここでは、NSArrayのカテゴリで、NSExpressionを使用して同様のタスクを容易にすることができます。これは、Tiagoの方法と同様です。文字列としてany NSExpression that you wish to calculateを渡すことができます(関数内にコロンが追加されています)。
@interface NSArray (Stats)
- (NSNumber *)calculateStat:(NSString *)stat;
@end
@implementation NSArray (Stats)
- (NSNumber *)calculateStat:(NSString *)stat
{
NSArray *args = @[[NSExpression expressionForConstantValue:self]];
NSString *statFormatted = [stat stringByAppendingString:@":"];
NSExpression *expression = [NSExpression expressionForFunction:statFormatted arguments:args];
return [expression expressionValueWithObject:nil context:nil];
}
@end
そうのような使用:
NSNumber *result = [myArray calculateStat:@"stddev"];
関連する問題
- 1. 。標準偏差の計算
- 2. 標準偏差計算(Java)
- 3. Javaの標準偏差の計算
- 4. 角度の標準偏差の計算?
- 5. 計算平均と標準偏差
- 6. 加重標準偏差誤差を計算する
- 7. gnuplot内のカラムの標準偏差を計算する方法
- 8. lapply - columnsを分割し標準偏差を計算する
- 9. MySQL:標準偏差を計算する正しい方法
- 10. 単純な標準偏差を計算するときの "AttributeError:sqrt"
- 11. 時刻の平均と標準偏差を計算するPostgreSQL
- 12. r data.framesの平均と標準偏差の計算
- 13. Javaを使用して標準偏差を計算しますか?
- 14. 標準偏差を「数値」列で計算する方法は?
- 15. R:母集団標準偏差をNAと計算する
- 16. 平均と標準偏差を計算する
- 17. 標準偏差エラーをscipy.optimize.least_squaresで計算する方法
- 18. 加重平均と標準偏差の計算
- 19. 母集団標準偏差の計算方法は?ここ
- 20. slamdata:標準偏差と平方根の計算方法は?
- 21. Tableau、加重標準偏差の計算方法
- 22. スキームプログラミング標準偏差
- 23. 標準偏差Java
- 24. バッチの標準偏差
- 25. モード、メジアン、平均、標準偏差、分散計算機
- 26. dequeの標準偏差を計算することができません
- 27. 標準偏差の計算に何が問題なのですか?
- 28. 平均値と標準偏差を計算する際の値なし
- 29. 標準偏差を計算し、Python 2.7を使用してカーブフィットをプロットする
- 30. excel/TTR標準偏差の差
1一顧は、あなたはそれに私を打ちます。 'double'よりも高い精度が必要な場合、いつでも' NSDecimal'に切り替えることができます。それは遅くなりますが、そのような精度の価格です。 :) –
ありがとう!それは魅力のように働く。 – Clay
サンプル偏差の場合、sumOfSquaredDifferences /([配列数] - 1)を実行するのを忘れないでください:P – sidyll