擅长:python、mysql、java
<p>当只追加一次或偶尔追加一次时,在数组上使用<code>np.append</code>应该没问题。这种方法的缺点是每次调用一个全新的数组时都会为其分配内存。在为大量样本扩展数组时,最好是预先分配数组(如果知道总大小),或者追加到列表中,然后转换为数组。</p>
<p>使用<code>np.append</code>:</p>
<pre><code>b = np.array([0])
for k in range(int(10e4)):
b = np.append(b, k)
1.2 s ± 16.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
</code></pre>
<p>之后使用python list转换为数组:</p>
<pre><code>d = [0]
for k in range(int(10e4)):
d.append(k)
f = np.array(d)
13.5 ms ± 277 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
</code></pre>
<p>预分配numpy数组:</p>
<pre><code>e = np.zeros((n,))
for k in range(n):
e[k] = k
9.92 ms ± 752 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
</code></pre>
<p>当最终的大小是未知的时,预分配很困难,我试着以50块为单位进行预分配,但它并没有接近使用列表。</p>
<pre><code>85.1 ms ± 561 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
</code></pre>