【发布时间】:2018-01-23 03:15:42
【问题描述】:
我想做一点 numpy 的练习,所以我决定borrow some quicksort code 并把它改成使用 numpy。
这是原文:
def quicksort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quicksort(left) + middle + quicksort(right)
print (quicksort([1,2,32,121,4,5,51]))
在这里我将其更改为使用 numpy 数组
def quicksort_np(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = arr[arr < pivot]
middle = arr[arr == pivot]
right = arr[arr > pivot]
return quicksort_np(left) + middle + quicksort_np(right)
print (quicksort_np(np.array([1,2,32,121,4,5,51])))
运行原始版本,我得到正确的输出:
[1, 2, 4, 5, 32, 51, 121]
但是,运行 numpy 版本时,我得到一个 空列表:
[]
我不明白问题出在哪里。我认为这与新列表不是副本有关,所以我尝试在 quicksort_np 内的每个列表上调用 .copy(),但仍然得到相同的输出。
【问题讨论】:
-
将列表代码移植到
numpy不是学习numpy的好方法。表面上的相似性可能会导致这样的错误,并且还会促进糟糕的numpy风格。
标签: python arrays sorting numpy