gpt4 book ai didi

Java IntStream、Range 和 mapToDouble 以及 C# 中等效的 reduce 函数

转载 作者:行者123 更新时间:2023-12-01 14:27:08 28 4
gpt4 key购买 nike

有人可以帮助我解决以下 Java 行的作用吗?或者你能给出一个 C# 等效于下面的代码行吗

  public static double[] logSumExp(List<Double> a, List<Double> b) {
double amax = Collections.max(a);
double sum = IntStream.range(0, a.size())
.mapToDouble(i -> Math.exp(a.get(i) - amax) * (i < b.size() ? b.get(i) : 1.0))
.reduce(0.0, Double::sum);
double sign = Math.signum(sum);
sum *= sign;
double abs = Math.log(sum) + amax;
double[] ret = {abs, sign};
return ret;
}

最佳答案

在 Java 中使用流的代码通常可以很好地转换为 .NET 中的 LINQ。
mapmapToXXXSelect , reduceAggregate ,但在这里Sum更方便。 IntStream.rangeEnumerable.Range .其他一切都应该有一个“明显的”等价物。

public static double[] LogSumExp(IList<double> a, IList<double> b) {
double amax = a.Max();
double sum = Enumerable.Range(0, a.Count)
.Select(i => Math.Exp(a[i] - amax) * (i < b.Count ? b[i] : 1.0))
.Sum();
double sign = Math.Sign(sum);
sum *= sign;
double abs = Math.Log(sum) + amax;
double[] ret = {abs, sign};
return ret;
}

如果您使用的是 C# 7+,您应该真正返回一个元组:
public static (double abs, double sign) LogSumExp(IList<double> a, IList<double> b) {
...
return (abs, sign);
}

关于Java IntStream、Range 和 mapToDouble 以及 C# 中等效的 reduce 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62249224/

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