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 det,然后det(A)代替A.det().

于 2012-06-12T08:55:29.547 回答