<p>更正:</p>
<pre><code>arr1=[[19],[29],[ 0],[11],[ 1],[86],[90],[28],[23],[31],[39],[96],[82],[17],[71],[39],[ 8],[97]]
</code></pre>
<p><code>d</code>是:</p>
<pre><code>{9: 0, 19: 1, 29: 2, 39: 3, 49: 4, 59: 5, 69: 6, 79: 7, 89: 8, 99: 9}
</code></pre>
<p>完全回溯的错误是:</p>
<pre><code>Traceback (most recent call last):
File "stack53618793.py", line 8, in <module>
arr2 = np.vectorize(d.get)(arr1)
File "/usr/local/lib/python3.6/dist-packages/numpy/lib/function_base.py", line 1972, in __call__
return self._vectorize_call(func=func, args=vargs)
File "/usr/local/lib/python3.6/dist-packages/numpy/lib/function_base.py", line 2051, in _vectorize_call
res = array(outputs, copy=False, subok=True, dtype=otypes[0])
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'
</code></pre>
<p>用<code>n=8</code><code>d</code>表示<code>{8: 0, 18: 1, 28: 2, 38: 3, 48: 4, 58: 5, 68: 6, 78: 7, 88: 8, 98: 9}</code>。<code>arr2</code>有很多<code>None</code>,因为这是<code>get</code>的默认值。你知道吗</p>
<p><code>vectorize</code>使用第一个元素<code>arr1</code>执行测试计算,并使用结果设置返回值<code>dtype</code>。你知道吗</p>
<p>使用<code>n=8</code>,<code>get(19)</code>返回<code>None</code>,因此返回的数据类型设置为<code>object</code>。你知道吗</p>
<p>使用<code>n=9</code>,<code>get(19)</code>返回整数<code>1</code>(在<code>d</code>),因此返回的数据类型是<code>int</code>。当另一个<code>get</code>返回<code>None</code>时产生错误。你知道吗</p>
<p>一种修复方法是设置<code>otypes</code>。你知道吗</p>
<pre><code>arr2 = np.vectorize(d.get, otypes=[object])(arr1)
</code></pre>
<p>另一种可能性是用get()替换<code>get</code></p>
<pre><code>arr2 = np.vectorize(lambda x: d.get(x,10))(arr1)
</code></pre>
<p>那么就不需要<code>None</code>替换步骤了。你知道吗</p>
<p>这种矢量化的<code>get</code>可能不是进行这种替换的最快方法。但是,如果您确实使用<code>vectorize</code>,您需要注意像这样的自动<code>otypes</code>陷阱。你知道吗</p>
<p><em>当您询问错误时,您应该包含<strong>完整回溯,或者至少足够让我们确切地知道错误发生的位置。在我运行测试用例之前,这对我来说并不明显。</em></p>