回答
如果你是純粹的速度之後,這裏有一些計時:
In [13]: a = np.random.rand(1000)
In [14]: %timeit np.sort(a)
10000 loops, best of 3: 31.9 us per loop
In [15]: %timeit np.ediff1d(a)
100000 loops, best of 3: 15.2 us per loop
In [16]: %timeit np.diff(a)
100000 loops, best of 3: 7.76 us per loop
In [17]: %timeit np.min(a)
100000 loops, best of 3: 3.19 us per loop
In [18]: %timeit np.unique(a)
10000 loops, best of 3: 53.8 us per loop
的unique
的時機,希望它會比較快到sort
,並且如果獨特陣列的長度沒有調用diff
和min
,您可能會提前中斷比陣列本身短(因爲這意味着你的答案是0
)。但unique
的開銷超過了任何收益。
所以看起來我能夠提供的唯一潛在的改進與diff
更換ediff1d
:
In [19]: %timeit np.min(np.diff(np.sort(a)))
10000 loops, best of 3: 47.7 us per loop
In [20]: %timeit np.min(np.ediff1d(np.sort(a)))
10000 loops, best of 3: 57.1 us per loop
Interresting。我期待'ediff1d'比'diff'快,因爲它是用於1d數組,但顯然'diff'更快。 – 2013-04-11 17:23:55
您目前的做法絕對是最佳的。通過首先排序,可以減少每個元素之間的空間,並且ediff1d
將返回差異數組。以下是一個建議:
由於我們知道差別必須是正數,因爲我們有升序排序,所以我們可以手動執行ediff1d
並在差異爲零時包含中斷。這樣一來,如果你有數組排序x
:
[1, 1, 2, 3, 4, 5, 6, 7, ... , n]
而不是通過n個元素去,你ediff1d
功能早期斷裂和僅覆蓋了前兩個元素,返回[0]
。這也減小了差異數組的大小,從而減少了您的min
調用所需的迭代次數。
這裏是無需使用numpy的示例:
x = [1, 12, 3, 8, 4, 1, 4, 9, 1, 29, 210, 313, 12]
def ediff1d_custom(x):
darr = []
for i in xrange(len(x)):
if i != len(x) - 1:
diff = x[i + 1] - x[i]
darr.append(diff)
if diff == 0:
break
return darr
print min(ediff1d_custom(sorted(x))) # prints 0
有趣,但矯枉過正,而不是我所需要的。我需要的是單個1d數組內的值。 – 2013-04-11 16:28:47
啊我看到了,答案更新了。 – 2013-04-11 16:36:49
除非實際期望的最小值爲零,否則這將比OP的現有解決方案慢得多。 – askewchan 2013-04-11 17:12:20
try:
min(x[i+1]-x[i] for i in xrange(0, len(x)-1))
except ValueError:
print 'Array contains less than two values.'
在你做這個之前''''仍然必須被分類,因爲這基本上是非numpy'min(ediff1d(x))' – askewchan 2013-04-11 17:09:58
- 1. 給定數組中2個元素之間的最小距離
- 2. 圓形列表中兩個元素之間的最小距離?
- 3. 找到xyz之間的最小距離
- 4. NetLogo:海龜之間的最小距離
- 5. 矩形之間的最小距離
- 6. 獲取元素之間的距離
- 7. 向量和點之間的距離
- 8. 計算數組中向量之間的最大距離
- 9. 元素在兩點之間的距離和距離
- 10. 查找使兩組之間的距離最小的像素
- 11. 如果兩個元素之間的距離小於X你Ÿ
- 12. 選擇元素對之間的最短距離
- 13. 座標簇與沿着單位向量i的點之間的最小距離
- 14. 從列表中的最小元素到最大元素的距離
- 15. 向量化向量之間的距離計算
- 16. Python中三維點之間的最小距離,平均距離和最大距離
- 17. 我如何獲得列表元素之間的最小差距?
- 18. 最小距離
- 19. 陣列中變量之間的距離
- 20. 查找像素和像素組之間最小距離的算法
- 21. 的最小距離
- 22. 最小,最大,各組/縣之間的平均點距離
- 23. 最小化任何相鄰站之間的最大距離
- 24. 矢量之間的測量距離
- 25. 最小化Python中兩組點之間的總距離
- 26. 在MATLAB中找到點和曲線之間的最小距離
- 27. 指定infoVis JIT圖中節點之間的最小距離
- 28. 最小化陣列中相關項目之間的距離
- 29. 查找cuda中n個點之間的最小距離
- 30. C++中2點之間的最小距離
你想更加優雅或更有效率? – 2013-04-11 16:24:32
;-)嗯,我認爲在我的情況下,我需要最快的 – 2013-04-11 16:25:51