簡體   English   中英

在python中有效地找到數組的范圍?

[英]Efficiently find the range of an array in python?

有沒有一種可接受的有效方法來查找python中數字列表的范圍(即最大值 - 最小值)? 我嘗試過使用循環,我知道我可以使用減法的minmax函數。 我只是想知道是否有某種更快的內置。

如果你真的需要高性能,試試Numpy。 函數numpy.ptp計算數組中值的范圍(即max - min )。

你不可能找到比minmax函數更快的東西。

您可以編寫一個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)

另一種可能性是在數組周圍插入自己的類(如果你想直接在真實數組上工作,這可能是不可能的)。 這基本上會執行以下步驟:

  • 標記初始空數組清理。
  • 如果將第一元件陣列,設置theminthemax到該值。
  • 如果添加元素到一個非空數組,設置theminthemax取決於如何在新的值進行比較以它們。
  • 如果刪除等於的元素theminthemax ,標記陣列臟。
  • 如果從一個干凈的陣列要求的最小值和最大值,返回theminthemax
  • 如果從臟陣列請求的最小值和最大值,計算theminthemax在上面的偽代碼中使用循環,則設置陣列是干凈的。

這樣做是為了緩存最小值和最大值,以便在最壞的情況下,您只需要不經常進行大計算(在刪除最小值或最大值的元素之后)。 所有其他請求都使用緩存信息。

此外,添加元素的保留theminthemax最新無大的計算。

而且,甚至可能是更好的,你可以保持每個臟標志theminthemax ,使弄臟一個將仍然允許您使用反璞歸真的緩存值。

如果您使用Numpy並且您擁有一維數組(或者可以從列表中快速創建一個),那么就是函數numpy.ptp()

http://docs.scipy.org/doc/numpy/reference/generated/numpy.ptp.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM