gpt4 book ai didi

objective-c - 我遇到了decimalNumberBySubtracting 和decimalNumberByDividingBy 的问题

转载 作者:行者123 更新时间:2023-12-03 17:17:49 27 4
gpt4 key购买 nike

简单地说,decimalNumberBySubtractingdecimalNumberByDividingBy 根本不起作用。没有错误,只是结果困惑。我真的需要解决这个问题,但我没有收到任何错误,我想不出任何其他方法来进行计算!我得到的数字如下:

257849691392950000000000000000000000000000000000000000000000000000000000000000000

他们应该评估的地方:

-0.581

这是一个很长的故事。我正在尝试对数据集进行简单的 Z 分数计算。 Zscore 定义为(X - Average)/(stdDev)。很简单。我的测试数据包括 5 个板,每个板有 96 个样本。此代码识别每个单独的板,生成每个板的平均值和标准差,然后对于该板中的每个样本,执行上述计算。

//identify unique plates
NSSet * uniqueValues = [NSSet setWithArray:[items valueForKey:@"plate"]];
id i;
for (i in uniqueValues) {
//Lots of NSExpression and Predicate stuff I pulled out cause its working fine

NSExpression *plateMeanExpression = [NSExpression expressionForFunction:@"average:"
arguments:plateArgumentArray];
NSExpression *plateStdDevExpression = [NSExpression expressionForFunction:@"stddev:"
arguments:plateArgumentArray];

// generate Z Score and StDev:
NSDecimalNumber *zscoreMean = [plateMeanExpression expressionValueWithObject:nil
context:nil];
NSDecimalNumber *zscoreStdDev = [plateStdDevExpression expressionValueWithObject:nil
context:nil];

//iterate through samples in each plate and perform calculation, update CoreData
for (ScreenVariables *zValue in eachPlateArray) {
NSDecimalNumber *deltaTemp = [zValue valueForKey:@"delta"];
NSDecimalNumber *numerator = [deltaTemp decimalNumberBySubtracting:zscoreMean];
NSDecimalNumber *zScoreValue = [numerator decimalNumberByDividingBy:zscoreStdDev];
[zValue setZScore:zScoreValue];

问题是,当我运行此计算时,我应该从 ~(-6,6) 获得一个数字,其中 99% 的值落在 -3 和 3 之间。返回的一个数据点是这样的:

257849691392950000000000000000000000000000000000000000000000000000000000000000000

好吧,我通过插入变量 deltaTempnumeratorzscoreMeanzscoreStdDev 进行了一些故障排除进入我的 NSTableView。这个想法是看看 XCode 正在评估这些变量,并修复哪个是麻烦制造者。是否使用此代码:

ScreenVariables *addData = [NSEntityDescription insertNewObjectForEntityForName:@"ScreenVariables"
inManagedObjectContext:self.managedObjectContext];
[addData setValue:deltaTemp forKey:@"someAvailableKey-1"];
[addData setValue:numerator forKey:@"someAvailableKey-2"];
[addData setValue:zscorePlateMean forKey:@"someAvailableKey-3"];
[addData setValue:zscoreStdDev forKey:@"someAvailableKey-4"];

我得到了变量的值:

deltaTemp = -919
zscoreMean = -141
numerator = -919 // should be -778.58 = -919 -(-141)
zscoreStdDev = 1337.635067946411

其计算结果为 Z-Score= -0.581...

这是一个完全有效的 ZScore ...所以问题出在:

[deltaTemp decimalNumberBySubtracting:zscoreMean];
[numerator decimalNumberByDividingBy:zscoreStdDev];

变量分子未正确计算,zscore 值也未正确计算。我的 CoreData DataModel 特别将每个数字变量的输入类型定义为 NSDecimalNumber 所以我假设我的数字编码很好,因为它们被单独插入而没有任何问题......

最佳答案

NSDecimalNumber *zscoreMean = [plateMeanExpression  expressionValueWithObject:nil context:nil];
NSDecimalNumber *zscoreStdDev = [plateStdDevExpression expressionValueWithObject:nil context:nil];

这些是对 NSNumber 对象进行评估,而不是 NSDecimalNumber 对象...不知道为什么我没有收到任何错误。

    NSNumber *expMean = [plateMeanExpression  expressionValueWithObject:nil context:nil];
NSNumber *expStdDev = [plateStdDevExpression expressionValueWithObject:nil context:nil];

NSDecimalNumber *zscoreMean = [NSDecimalNumber decimalNumberWithDecimal:[expMean decimalValue]];
NSDecimalNumber *zscoreStdDev = [NSDecimalNumber decimalNumberWithDecimal:[expStdDev decimalValue]];

效果非常好。

关于objective-c - 我遇到了decimalNumberBySubtracting 和decimalNumberByDividingBy 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2179291/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com