擅长:python、mysql、java
<p><code>np.frompyfunc</code>已编译,因此我必须深入研究源代码以查看它到底在做什么。但它似乎假定func输出是一个(难以理解的)Python对象。在</p>
<pre><code>foo1 = np.frompyfunc(np.arange,1,1)
foo2 = np.vectorize(np.arange,otypes='O')
</code></pre>
<p>这两个函数产生相同的输出,尽管<code>foo1</code>更快。在</p>
^{pr2}$
<p>生成大小不同的数组</p>
<pre><code>array([array([], dtype=int32), array([0]), array([0, 1]), array([0, 1, 2])], dtype=object)
</code></pre>
<p>其中as<code>foo1(np.ones((4,))</code>都是相同的,理论上可以叠加。在</p>
<p>在循环期间或之后,不会尝试测试对象是否是数组(或列表)以及它们是否可以组合成一个高维数组。在</p>
<p>使用<code>plonser's</code>是个好主意。事实上,<code>frompyfunc</code>加<code>vstack</code>比更常见的列表理解加<code>vstack</code>快。在</p>
<pre><code>In [54]: timeit np.vstack([np.arange(i) for i in 10*np.ones((10,))])
10000 loops, best of 3: 169 µs per loop
In [55]: timeit np.vstack(foo1(10*np.ones((10,))))
10000 loops, best of 3: 127 µs per loop
</code></pre>