<pre><code>In [31]: one,two = mpmath.mpmathify(1), mpmath.mpmathify(2)
In [32]: one,two
Out[32]: (mpf('1.0'), mpf('2.0'))
In [33]: one+two
Out[33]: mpf('3.0')
In [34]: jn(1,2)
Out[34]: 0.5767248077568736
In [35]: jn(one,two)
-
TypeError Traceback (most recent call last)
<ipython-input-35-ec48c25f686b> in <module>
> 1 jn(one,two)
TypeError: ufunc 'jv' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
</code></pre>
<p><code>mpmath</code>数字不能用在<code>jn/jv</code>中。你知道吗</p>
<p>同样,一个<code>mpmath</code>数可以用在<code>mpmath</code>函数中,但不能用在等价的<code>numpy</code>:</p>
<pre><code>In [41]: mpmath.sin(one)
Out[41]: mpf('0.8414709848078965')
In [42]: np.sin(1)
Out[42]: 0.8414709848078965
In [43]: np.sin(one)
-
AttributeError Traceback (most recent call last)
AttributeError: 'mpf' object has no attribute 'sin'
The above exception was the direct cause of the following exception:
TypeError Traceback (most recent call last)
<ipython-input-43-38fc918b311a> in <module>
> 1 np.sin(one)
TypeError: loop of ufunc does not support argument 0 of type mpf which has no callable sin method
</code></pre>
<p>可以使用以下方法转换mpmath normal python数字:</p>
<pre><code>In [44]: float(one)
Out[44]: 1.0
In [45]: jn(float(one),float(two))
Out[45]: 0.5767248077568736
</code></pre>
<p><code>np.float64(one)</code>也可以,但是<code>jn</code>不喜欢<code>np.float128(one)</code>。显然<code>jn</code>是为C double编译的,但不是更高精度的float。你知道吗</p>
<p><code>mpmath</code>是否谈到将其与<code>numpy</code>一起使用?我见过<code>mpmath</code>和<code>sympy</code>一起使用,但没有和<code>numpy</code>一起使用。你知道吗</p>