web-dev-qa-db-ja.com

numpy.product対numpy.prod対ndarray.prod

私はNumpyドキュメントを読んでいますが、関数np.prod(...)np.product(...)およびndarrayメソッドa.prod(...)はすべて同等であるようです。

スタイル/可読性とパフォーマンスの両方の観点から、使用するのに適したバージョンはありますか?異なるバージョンが望ましい状況はありますか?そうでない場合、なぜ同じ操作を実行するために3つの別個の非常に類似した方法があるのですか?

10
dkv

今日(1.15.0)のmasterブランチでは、np.productは単にnp.prod、そして最終的には非推奨になる可能性があります。 MAINT:エイリアス関数の重複した実装を削除する。#1065 を参照。

そしてnp.prodおよびndarray.prodどちらもumath.multiply.reduceなので、フリー関数がarray-likeタイプ(Pythonリスト)。

これ以前は、NumPy 1.14.2と同様に、ドキュメントはnp.productおよびnp.prodは同じでしたが、Paragが言及している実装の重複が原因でバグがありました。つまり、 #10651 からのEric Weiserの例:

>>> class CanProd(object):
        def prod(self, axis, dtype, out): return "prod"  
>>> np.product(CanProd())
<__main__.CanProd object at 0x0000023BAF7B29E8>
>>> np.prod(CanProd())
'prod'

つまり、簡単に言えば、これらは同じであり、np.prod以上np.product後者は廃止される可能性があるエイリアスであるため。

7
miradulo

これはNumPy 1.14.のソースコードから収集できたものです。現在のマスターブランチ(NumPy 1.15.0)に関連する回答については、miraduloの回答を参照してください。

  • ndarrayの場合、prod()product()は同等です。

  • ndarrayの場合、prod()product()はどちらもum.multiply.reduce()を呼び出します。

  • オブジェクトタイプがndarrayではないが、prodメソッドがまだある場合、prod()prod(axis=axis, dtype=dtype, out=out, **kwargs)を返し、productは_um.multiply.reduce_を使用してみてください。

  • オブジェクトがndarrayではなく、prodメソッドがない場合、product()として動作します。

  • ndarray.prod()prod()と同等です。

好みや読みやすさに関する質問の後半についてはわかりません。

4