3

M.det()の代わりに書きたかったので、次のnumpy.linalg.det(M)ようにしました。

numpy.matrix.det = numpy.linalg.det

そしてそれはうまくいきました。

この訴訟に対して何か言いたいことはありますか?


例:

import numpy as np
np.matrix.det = np.linalg.det
M = np.matrix([[1,2],[3,4]])
print M.det()

正しい出力:-2.0

4

1 に答える 1

2

これはモンキーパッチと呼ばれます。detこの特殊なケースでは機能するかもしれませんが、そのメソッドはプログラムにしか存在せず、どこにも文書化されていないため、プログラムを追跡するのが難しくなります。また、np.matrix実装の詳細、具体的には純粋な Python クラスであり、すべてのクラスで機能するわけではありません。

>>> numpy.ndarray.det = numpy.linalg.det
------------------------------------------------------------
Traceback (most recent call last):
  File "<ipython console>", line 1, in <module>
TypeError: can't set attributes of built-in/extension type 'numpy.ndarray'

私はこれに反対することをお勧めします。それはあなたのプログラムを読みやすく維持するのを難しくfrom numpy.linalg import detdet(A)ますA.det()

于 2012-06-12T08:55:29.547 に答える