對于固定大小的特征,我在同一染色體上都有一個起始坐標串列,我正在嘗試生成一個 PyRanges 物件。
我在 125 個坐標的串列上對 PyRanges 物件的生成進行了計時,它花費了大約 3.5 毫秒。這似乎比預期的要慢(這是我第一次使用這個庫)所以我嘗試在不同大小的串列上測量同一行程的速度
這些是性能測驗的結果:
N = 1: 3.03ms
N = 10: 2.96ms
N = 100: 3.33ms
N = 125: 3.24ms
N = 200: 3.11ms
N = 500: 3.12ms
N = 10000: 6.86ms
N = 100000: 32.6ms
看起來創建 PyRanges 物件需要一個基本時間(N = 1,它仍然需要一些時間)然后,雖然時間似乎取決于特征的數量,但這種關系似乎不太激烈。事實上,創建一個包含 10000 個專案的 PyRanges 物件只需要 2 倍于創建一個只有 10 個專案的時間。
這是我正在使用的代碼:
chr = "chrX"
size = 10
N = 1
points = np.array([random.randint(0, 1000000) for i in range(N)])
genomic_range = pr.PyRanges(
chromosomes= chr,
starts = points,
ends = points size - 1
)
難道我做錯了什么?為什么 PyRange 的生成即使對于很少的專案也要花費這個時間?
uj5u.com熱心網友回復:
簡而言之,PyRanges 在內部使用 Pandas,這對于小輸入非常慢。
您的函式呼叫在_init其中呼叫create_pyranges_df本身執行以下行:
chromosomes = pd.Series([chromosomes] * len(starts), dtype="category")
這條線在我的機器上需要 0.25 毫秒,對于如此非常小的輸入來說非常慢(我希望這至少快 100 倍)。這dtype="category"似乎是它緩慢的原因。
代碼中最慢的部分位于此處:
for s in columns:
if isinstance(s, pd.Series):
s = pd.Series(s.values, index=idx) # This line is executed several time
else:
s = pd.Series(s, index=idx)
series_to_concat.append(s)
擁有 10 列和 ~0.2 毫秒來創建每個pd.Series物件導致花費 ~2 毫秒幾乎什么都不做......
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/447859.html
