擅长:python、mysql、java
<p>如前所述,不期望为列表编写的代码也能泛化为NumPy数组。在</p>
<p>如果要对NumPy数组排序,可以使用<code>sorted()</code></p>
<pre><code>blist = np.array([54, 26, 93, 17, 77, 31, 44, 55, 20])
print(sorted(blist))
</code></pre>
<p>问题在于合并函数为数组分配新值的方式。如果运行此程序,您可以看到问题:</p>
^{pr2}$
<p>似乎<code>lefthalf</code><em>引用了<code>alist</code>数组中的值,因此,<code>alist</code>值的赋值也同时改变了<code>lefthalf</code>的值。在</p>
<p>运行此代码块会使其更加明显:</p>
<pre><code>alist = np.array([54,26])
mid = len(alist)//2
lefthalf = alist[:mid]
righthalf = alist[mid:]
print(lefthalf,"lefthalf before the incorrect assignment")
alist[0]=righthalf[0]
print(lefthalf,"lefthalf after the incorrect assignment")
</code></pre>
<p>讨论了这个问题<a href="https://stackoverflow.com/questions/3059395/numpy-array-assignment-problem">here</a>。实际上,您可以通过在<code>lefthalf = alist[:mid]</code><code>righthalf = alist[mid:]</code>之后添加<code>.copy()</code>,即<code>lefthalf = alist[:mid].copy()</code>等来修复它</p>