sum() のような乗算以外の関数は何ですか?製品()?
質問
パイソンの sum()
関数は反復可能な数値の合計を返します。
sum([3,4,5]) == 3 + 4 + 5 == 12
代わりに製品を返す関数を探しています。
somelib.somefunc([3,4,5]) == 3 * 4 * 5 == 60
確かそのような機能があったのですが、見つかりません。
解決
実際には、グイドは、アイデアを拒否: http://bugs.python.org/issue1093する
しかし、その問題に述べたように、あなたはかなり簡単にものを作ることができます:
from functools import reduce # Valid in Python 2.6+, required in Python 3
import operator
reduce(operator.mul, (3, 4, 5), 1)
他のヒント
アップデート:
Python 3.8 では、 プロッド 機能が追加されました 数学 モジュール。見る: math.prod().
古い情報:Python 3.7 以前
探している関数は次のように呼ばれます prod() または 製品() しかしPythonにはその機能がありません。したがって、独自に記述する必要があります (これは簡単です)。
prod() の発音
はい、そうです。グイド その考えを拒否した 組み込みの prod() 関数はほとんど必要ないと考えたためです。
reduce() を使用した代替方法
あなたが提案したように、それを使用して独自に作成するのは難しくありません 減らす() そして 演算子.mul():
from functools import reduce
def prod(iterable):
return reduce(operator.mul, iterable, 1)
>>> prod(range(1, 5))
24
Python 3 では、 減らす() 関数はに移動されました 関数ツールモジュール, したがって、次を追加する必要があります。
from functools import reduce
特定のケース:階乗
余談ですが、主な動機となるユースケースは、 prod() 階乗を計算することです。それについてはすでにサポートされています 数学モジュール:
>>> import math
>>> math.factorial(10)
3628800
対数を使用した代替法
データが浮動小数点で構成されている場合は、次を使用して積を計算できます。 和() 指数と対数を使用すると、次のようになります。
>>> from math import log, exp
>>> data = [1.2, 1.5, 2.5, 0.9, 14.2, 3.8]
>>> exp(sum(map(log, data)))
218.53799999999993
>>> 1.2 * 1.5 * 2.5 * 0.9 * 14.2 * 3.8
218.53799999999998
注意してください、の使用 ログ() すべての入力が正である必要があります。
に建て1はありませんが、実証されたように、それは、あなた自身をロールバックするのは簡単です<のhref = "https://stackoverflow.com/questions/493853/which-python-module-is-suitable-for-データ操作・イン・リスト/ 494034#494034" >ここのます:
import operator
def prod(factors):
return reduce(operator.mul, factors, 1)
この質問への回答を参照してください。
何をしてnumpyの中で prod()
にありますあなたが求めているます。
Numeric.product
(または
reduce(lambda x,y:x*y,[3,4,5])
)
この
を使用しますdef prod(iterable):
p = 1
for n in iterable:
p *= n
return p
組み込みのprod
機能はありませんので。
答えの方が好きです ある そして b 上記を使用して functools.reduce() そしてその 答え を使用して numpy.prod(), 、しかし、ここで使用するさらに別の解決策があります itertools.accumulate():
import itertools
import operator
prod = list(itertools.accumulate((3, 4, 5), operator.mul))[-1]
おそらくない「組み込み」が、私はそれが組み込みを検討してください。とにかくちょうどnumpyの使用
import numpy
prod_sum = numpy.prod(some_list)