gpt4 book ai didi

java - 使用 Java DoubleStream 过滤掉 NaN 查找平均值

转载 作者:行者123 更新时间:2023-11-29 07:23:51 24 4
gpt4 key购买 nike

我确信有一个简单的方法可以做到这一点,但我没有找到。

本质上,我想做的是利用 Java DoubleStream 来计算各种事物,例如值数组的平均值。但是,数组可能包含 NaN 值,这当然会导致结果也是 NaN。所以我想以某种方式,在一行中过滤掉 NaN 并计算平均值。

例如,此代码将产生 NaN 的结果,这是我不想要的。

import java.util.stream.DoubleStream;

public class StreamTests {
public static void main(String[] args) {
double[] x = {3.14159, 42, 2.71828, Double.NaN};
double mean = DoubleStream.of(x).average().getAsDouble();
System.out.println(mean);
}
}

我想做的更像这样:

import java.util.stream.DoubleStream;

public class StreamTests {
public static void main(String[] args) {
double[] x = {3.14159, 42, 2.71828, Double.NaN};
double mean = DoubleStream.of(x).ifNotNaN().average().getAsDouble();
System.out.println(mean);
}
}

例如,我可以用 Python 做这样的事情:

import math
x = [3.14159, 42, 2.71828, float('NaN')]
mean = sum([i for i in x if not math.isnan(i)]) / len(x)
print(mean)

我知道为什么在第一个代码块中产生 NaN,只是标准的浮点行为。而且我也知道我可以循环遍历这些值并检查每个值,等等,但这正是我要避免的。我希望代码更加紧凑和优雅。

最佳答案

使用 filter method ,传入一个使用 Double.isNaNDoublePredicate过滤掉它们。

double mean = DoubleStream.of(x)
.filter(d -> !Double.isNaN(d))
.average().getAsDouble();

关于java - 使用 Java DoubleStream 过滤掉 NaN 查找平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58295338/

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