<p><code>numpy.resize</code>是<a href="https://github.com/numpy/numpy/blob/v1.12.0/numpy/core/fromnumeric.py#L1078-L1140" rel="nofollow noreferrer">pure python function</a>:</p>
<pre><code>import numpy as np
def resize(a, new_shape):
"""I did some minor changes so it all works with just `import numpy as np`."""
if isinstance(new_shape, (int, np.core.numerictypes.integer)):
new_shape = (new_shape,)
a = np.ravel(a)
Na = len(a)
if not Na:
return np.zeros(new_shape, a.dtype)
total_size = np.multiply.reduce(new_shape)
n_copies = int(total_size / Na)
extra = total_size % Na
if total_size == 0:
return a[:0]
if extra != 0:
n_copies = n_copies+1
extra = Na-extra
a = np.concatenate((a,)*n_copies)
if extra > 0:
a = a[:-extra]
return np.reshape(a, new_shape)
</code></pre>
<p>如果你自己实现这个数组,你就可以直接向前。不幸的是,对于ND数组来说要复杂得多,因为nopython numba函数中不支持某些操作:<code>isinstance</code>,<code>reshape</code>和元组乘法。以下是1D等效值:</p>
^{pr2}$
<p>如果您不希望“重复输入”行为,而只将其用于增大大小,则更容易:</p>
<pre><code>@nb.njit
def resize(a, new_size):
new = np.zeros(new_size, a.dtype)
new[:a.size] = a
return new
</code></pre>
<p>这些函数用<code>numba.njit</code>修饰,因此可以在nopython模式下的任何numba函数中调用。在</p>
<hr/>
<p>不过,需要注意的是:一般情况下,您不想调整大小,或者如果您想调整大小,请确保您选择的方法具有<a href="https://en.wikipedia.org/wiki/Amortized_analysis" rel="nofollow noreferrer">amoritzed ^{<cd5>} cost (Wikipedia link)</a>。如果您可以估计最大长度,那么最好立即预先分配一个大小正确(或稍微过度分配)的数组。在</p>