回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p><code>numpy.vectorize</code>接受一个函数f:a->;b并将其转换为g:a[]->;b[]。</p>
<p>当<code>a</code>和<code>b</code>是标量时,这很好,但我想不出为什么它不能与b一起作为<code>ndarray</code>或列表工作,即f:a-&g t;b[]和g:a[]->;b[]</p>
<p>例如:</p>
<pre><code>import numpy as np
def f(x):
return x * np.array([1,1,1,1,1], dtype=np.float32)
g = np.vectorize(f, otypes=[np.ndarray])
a = np.arange(4)
print(g(a))
</code></pre>
<p>这将产生:</p>
<pre><code>array([[ 0. 0. 0. 0. 0.],
[ 1. 1. 1. 1. 1.],
[ 2. 2. 2. 2. 2.],
[ 3. 3. 3. 3. 3.]], dtype=object)
</code></pre>
<p>好的,这样就给出了正确的值,但是错误的数据类型。更糟的是:</p>
<pre><code>g(a).shape
</code></pre>
<p>收益率:</p>
<pre><code>(4,)
</code></pre>
<p>所以这个数组几乎没用。我知道我可以改变它:</p>
<pre><code>np.array(map(list, a), dtype=np.float32)
</code></pre>
<p>给我想要的:</p>
<pre><code>array([[ 0., 0., 0., 0., 0.],
[ 1., 1., 1., 1., 1.],
[ 2., 2., 2., 2., 2.],
[ 3., 3., 3., 3., 3.]], dtype=float32)
</code></pre>
<p>但这既不是有效的,也不是Python。你们能找个更干净的方法吗?</p>
<p>提前谢谢!</p>