擅长:python、mysql、java
<p>你有两个选择:</p>
<ul>
<li><p>如果不再需要原始形状,最简单的方法是将新形状指定给数组</p>
<pre><code>a.shape = (a.size//ncols, ncols)
</code></pre>
<p>您可以通过<code>-1</code>切换<code>a.size//ncols</code>来自动计算正确的形状。确保<code>a.shape[0]*a.shape[1]=a.size</code>,否则会遇到一些问题。</p></li>
<li><p>您可以使用<code>np.reshape</code>函数获得一个新的数组,其工作原理与上面介绍的版本基本相同</p>
<pre><code>new = np.reshape(a, (-1, ncols))
</code></pre>
<p>如果可能的话,<code>new</code>将只是初始数组的视图<code>a</code>,这意味着数据是共享的。不过,在某些情况下,<code>new</code>数组将成为一个副本。请注意,<code>np.reshape</code>还接受一个可选关键字<code>order</code>,它允许您从行主C顺序切换到列主Fortran顺序。<code>np.reshape</code>是<code>a.reshape</code>方法的函数版本。</p></li>
</ul>
<p>如果您不能遵守要求<code>a.shape[0]*a.shape[1]=a.size</code>,那么您将不得不创建一个新数组。您可以使用<code>np.resize</code>函数并将其与<code>np.reshape</code>混合,例如</p>
<pre><code>>>> a =np.arange(9)
>>> np.resize(a, 10).reshape(5,2)
</code></pre>