私はNumpyドキュメントを読んでいますが、関数np.prod(...)
、np.product(...)
およびndarray
メソッドa.prod(...)
はすべて同等であるようです。
スタイル/可読性とパフォーマンスの両方の観点から、使用するのに適したバージョンはありますか?異なるバージョンが望ましい状況はありますか?そうでない場合、なぜ同じ操作を実行するために3つの別個の非常に類似した方法があるのですか?
今日(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
後者は廃止される可能性があるエイリアスであるため。
これは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()
と同等です。
好みや読みやすさに関する質問の後半についてはわかりません。