[英]Efficiently find the range of an array in python?
有沒有一種可接受的有效方法來查找python中數字列表的范圍(即最大值 - 最小值)? 我嘗試過使用循環,我知道我可以使用減法的min
和max
函數。 我只是想知道是否有某種更快的內置。
如果你真的需要高性能,試試Numpy。 函數numpy.ptp
計算數組中值的范圍(即max - min
)。
你不可能找到比min
和max
函數更快的東西。
您可以編寫一個minmax
函數,該函數執行單次傳遞來計算兩個值而不是兩次傳遞但您應該對此進行基准測試以確保它更快。 它可能不是用Python本身編寫的,但添加到Python的C例程可能會這樣做。 像(偽代碼,即使它看起來像Python):
def minmax (arr):
if arr is empty:
return (None, None)
themin = arr[0]
themax = arr[0]
for each value in arr[1:]:
if value < themin:
themin = value
else:
if value > themax:
themax = value
return (themin, themax)
另一種可能性是在數組周圍插入自己的類(如果你想直接在真實數組上工作,這可能是不可能的)。 這基本上會執行以下步驟:
themin
和themax
到該值。 themin
和themax
取決於如何在新的值進行比較以它們。 themin
或themax
,標記陣列臟。 themin
和themax
。 themin
和themax
在上面的偽代碼中使用循環,則設置陣列是干凈的。 這樣做是為了緩存最小值和最大值,以便在最壞的情況下,您只需要不經常進行大計算(在刪除最小值或最大值的元素之后)。 所有其他請求都使用緩存信息。
此外,添加元素的保留themin
和themax
最新無大的計算。
而且,甚至可能是更好的,你可以保持每個臟標志themin
和themax
,使弄臟一個將仍然允許您使用反璞歸真的緩存值。
如果您使用Numpy並且您擁有一維數組(或者可以從列表中快速創建一個),那么就是函數numpy.ptp()
:
http://docs.scipy.org/doc/numpy/reference/generated/numpy.ptp.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.