2017-03-09 4 views
1

Listで各要素の平方根の積を計算したいとしましょう。どのように私はPythonで同じことを達成することができ`Reduce`を使ったリスト内の平方根の積

24.0 

: 同じことが

import java.util.ArrayList; 

public class App { 
    public static void main(String[] args) { 

     ArrayList<Double> arrays = new ArrayList<>(); 
     arrays.add(4.0); 
     arrays.add(9.0); 
     arrays.add(16.0); 

     double i = arrays.stream().reduce(1.0, (a, b) -> (a * Math.sqrt(b)), 
                 (a, b) -> (a * b)); 
     System.out.println(i); 

    }; 
} 

出力のようにJavaで実現することができます。以下は間違っています。

>>> reduce(lambda a,b: math.sqrt(a)*math.sqrt(b), [4,9,16]) 
    9.797958971132712 

Javaで同じ構文が異なる結果を与えるが、それは

>>> math.sqrt(math.sqrt(4)*math.sqrt(9))*math.sqrt(16) 

と同等なので。それはどのように計算されますか?

double i = arrays.stream().reduce(1.0, (a, b) -> (Math.sqrt(a) * Math.sqrt(b))); 

出力:

8.23906857562847 

答えて

3

あなたは1で初期化された累積値としてX行為ここで最初のパラメータ、Javaで同じロジックを実装するための初期値を提供する必要があります。

from functools import reduce 
from math import sqrt 

reduce(lambda x, y: x * sqrt(y), [4,9,16], 1) 
# 24.0 

初期値を指定しない場合は、シーケンスの最初の要素から開始されます。初期値では

、これはあなたの最後のJavaの例と同等でなければなりません:

reduce(lambda x, y: sqrt(x) * sqrt(y), [4,9,16], 1) 
# 8.23906857562847