存在多個不連續的數值區間,如 [1,10] 、[20,50] 、[100,200] … ,此時該如何高效判斷乙個數值在這些區間內?
生物學資料分析中,有時需要判斷 snps 是否在 chipseq 或 atacseq 的 peak 區域內,並刪除掉不在這些區域內的 snps。在這些需求中, peak 區間的數量可能達到數萬之多,如何僅用一次迴圈就能達到目的?
pip install py-part
from part import interval
(1) 生成左閉右開的單個整數區間
interval = interval[
int]
(lower_value=
10, upper_value=20)
print
(interval)
# [10;20)
bool_ =
12in interval
print
(bool_)
# true
(2) 預設情況下,生成的區間為左閉右開
,可以通過upper_closed
和lower_closed
進行設定。如下,生成左開右閉的區間。
interval = interval[
int]
(lower_value=
10, upper_value=
20, upper_closed=
true
, lower_closed=
false
)print
(interval)
# (10;20]
(3) 生成字元區間
interval = interval[
str]
(lower_value=
"abc"
, upper_value=
"def"
, upper_closed=
true
)# ['abc';'def']
(4) 兩個區間是否存在交集判斷
a = interval[
int]
(lower_value=
10, upper_value=20)
b = interval[
int]
(lower_value=
15, upper_value=30)
# 判斷a與b區間是否存在交集
a.overlaps(b)
# true
(5) 判斷兩個區間是否具有相同的起點或終點
a = interval[
int]
(lower_value=
10, upper_value=20)
b = interval[
int]
(lower_value=
15, upper_value=30)
# 判斷a與b區間的起點是否相同
a.starts(b)
# false
# 判斷a與b區間的終點是否相同
a.finishes(b)
# false
(6) 利用frozenintervalset
構造多個區間
from part import frozenintervalset
每個區間用乙個元組表示,所有區間通過列表傳遞給 frozenintervalset 函式。例如:
a = frozenintervalset[
int]([
2,(6
,7),
(8,9
,none),
(10,11
,true
,true)]
)print
(a)# [2;2] | [6;7) | (8;9) | [10;11]
其它方法參照官方文件 python內建數值處理函式
absdivmodfloathexintmaxminoctpowround作為python內建數值處理函式。絕對值函式,返回當前數值的絕對值。abs 5 5 abs 9.3 9.3求商和餘數,將兩個 非複數 作為實參,返回商和餘數。等同於 a b,a b divmod 4 2 2,0 divmod ...
python做數值積分 積分區間為小數 數值積分
一.組合梯形公式 數值積分 問題描述 組合梯形公式求函式f x 2 sin 2 sqrt x 的積分近似值。輸入形式 在螢幕上依次輸入積分上限 下限和等距子區間個數。輸出形式 輸出使用組合梯形公式求得的積分近似值。樣例1輸入 1 6 10 樣例1輸出 8.19385457 樣例1說明 輸入 積分上限...
特徵處理 數值特徵處理
專案工作流程 標準化標籤,將標籤值統一轉換成range 標籤值個數 1 範圍內 簡單來說 labelencoder 是對不連續的數字或者文字進行編號 one hot的基本思想 將離散型特徵的每一種取值都看成一種狀態,若你的這一特徵中有n個不相同的取值,那麼我們就可以將該特徵抽象成n種不同的狀態,on...