擅长:python、mysql、java
<p>不,这是设计决定。如果要传入生成器,则需要使用<a href="https://docs.scipy.org/doc/numpy/reference/generated/numpy.fromiter.html" rel="nofollow noreferrer">^{<cd1>}</a>:</p>
<pre><code>>>> np.fromiter((i for i in range(10)), float)
array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
</code></pre>
<p>或者在调用<code>np.array</code>之前将其转换为<code>list</code>:</p>
<pre><code>>>> np.array(list(your_iterator))
</code></pre>
<hr/>
<p>其中一个原因是numpy需要在对象上迭代几次:一次确定结果数组的长度/dytpe,一次插入项。对于只能迭代一次的生成器和迭代器来说,这并不能很好地发挥作用。此外,生成器的长度可以是无限的(即<code>itertools.count</code>)和/或使用“太多内存”。你知道吗</p>
<p>其基本原理可能是:如果有人想使用生成器创建一个数组,那么它将占用大量内存,而且速度很慢——因此应该有意地这样做:要么将其强制转换为一个列表,要么使用<code>np.fromiter</code>。你知道吗</p>