擅长:python、mysql、java
<p>可以生成一个默认情况下不求值的自定义函数子类:</p>
<pre class="lang-py prettyprint-override"><code>class r(Function):
@classmethod
def eval(cls, i, j):
return
def doit(self, **kwargs):
i, j = self.args
return sqrt(Sum((X[i, d] - X[j, d])**2, (d, 1, D)))
</code></pre>
<p><code>eval</code>告诉它何时计算。因为它总是返回None,所以从不求值。它还告诉SymPy函数有两个参数。如果您愿意,您也可以让它在某些情况下返回显式值。例如,您可能希望它计算<code>i</code>和{<cd3>}是否是显式数字。在</p>
^{pr2}$
<p>有了它,您可以根据需要使用它,并在需要计算时调用<code>expr.doit()</code>。您还可以专门为某些函数定义求值以避免<code>doit</code>。例如,衍生品:</p>
<pre class="lang-py prettyprint-override"><code>def _eval_derivative(self, x):
return self.doit()._eval_derivative(x)
</code></pre>
<p>这将使<code>r(i, j).diff(i)</code>立即求值,而不必调用<code>doit</code>。在</p>
<p>其他函数有类似的方法可以定义。请参阅SymPy文档。在</p>