相关疑难解决方法(0)

寻找最长重叠范围

我有一个列表中的范围,如:

ranges = [(1, 50), (49, 70), (75, 85), (84, 88), (87, 92)]
Run Code Online (Sandbox Code Playgroud)

我想找到可以从这些构建的最长范围(当它们相互重叠时)

预期输出:

[(1, 70), (75, 92)]
Run Code Online (Sandbox Code Playgroud)

我有一个解决方案,但是它太复杂了,我相信一定有一个更简单的解决方案来解决这个问题

我的解决方案:

def overlap(x, y):
    return range(max(x[0], y[0]), min(x[-1], y[-1]) + 1)

ranges = [(1, 50), (49, 70), (75, 85), (84, 88), (87, 92)]

beg, end = min([x[0] for x in ranges]), 0
for i in ranges:
    if i[0] == beg:
        end = i[1]
while beg:
    for _ in ranges:
        for i in ranges:
            if i[1] > end and …
Run Code Online (Sandbox Code Playgroud)

python range python-3.x

34
推荐指数
3
解决办法
1323
查看次数

numpy:如何加入数组?(得到几个范围的联合)

我用Python numpy.

我有一个numpy索引数组a:

>>> a
array([[5, 7],
       [12, 18],
       [20, 29]])
>>> type(a)
<type 'numpy.ndarray'>
Run Code Online (Sandbox Code Playgroud)

我有一个numpy索引数组b:

>>> b
array([[2, 4],
       [8, 11],
       [33, 35]])
>>> type(b)
<type 'numpy.ndarray'>
Run Code Online (Sandbox Code Playgroud)

我需要加入一个数组a的数组b:

a+ b=>[2, 4] [5, 7] [8, 11] [12, 18] [20, 29] [33, 35]

=> a并且b有索引数组=> [2, 18] [20, 29] [33, 35]

(索引([2, 4][5, 7][8, 11][12, 18])按顺序进行

=> 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18=> [2, 18])

对于这个例子:

>>> …
Run Code Online (Sandbox Code Playgroud)

python arrays indexing numpy

7
推荐指数
1
解决办法
7095
查看次数

按重叠范围对行进行分组

我有一个数据框,其中left列是对象最左侧的位置,而right列是最右侧的位置。如果对象重叠,或者它们重叠(递归地)重叠的对象,我需要对它们进行分组。因此,例如,如果这是我的数据框:

     left  right
0      0    4
1      5    8
2      10   13
3      3    7
4      12   19      
5      18   23
6      31   35
Run Code Online (Sandbox Code Playgroud)

所以线03重叠 - 因此它们应该在同一组中,并且线1也是重叠线3 - 因此它加入了该组。

所以,对于这个例子,输出应该是这样的:

     left  right    group
0      0    4         0
1      5    8         0
2      10   13        1
3      3    7         0
4      12   19        1
5      18   23        1
6      31   35        2
Run Code Online (Sandbox Code Playgroud)

我想到了各种方向,但没有弄清楚(没有丑陋的for)。任何帮助将不胜感激!

python group-by overlap pandas

6
推荐指数
1
解决办法
1391
查看次数

pandas 按范围合并间隔

我有一个 pandas 数据框,如下所示:

  chrom  start  end  probability   read
0  chr1      1   10         0.99  read1
1  chr1      5   25         0.99  read2
2  chr1     15   25         0.99  read2
3  chr1     30   40         0.75  read4
Run Code Online (Sandbox Code Playgroud)

我想要做的是合并具有相同染色体(chrom 列)且坐标(开始,结束)重叠的间隔。在某些情况下,如果多个间隔彼此重叠,则即使它们不重叠,也会存在应该合并的间隔。请参阅上述示例中的第 0 行和第 2 行以及下面的合并输出

对于那些合并的元素,我想对它们的概率(概率列)进行求和,并计算“读取”列中的唯一元素。

使用上面的示例将导致以下输出,请注意行 0,1 和 2 已合并:

 chrom  start  end  probability  read
0  chr1      1   20         2.97     2
1  chr1     30   40         0.75     1
Run Code Online (Sandbox Code Playgroud)

到目前为止,我一直在使用 pybedtools merge 来执行此操作,但事实证明,执行数百万次(我的情况)时速度很慢。因此,我正在寻找其他选择,而 pandas 是显而易见的选择。我知道使用 pandas groupby可以对要合并的列应用不同的操作,例如nuniquesum,这是我需要应用的操作。尽管如此,pandas groupby 仅合并具有精确“chrom”、“start”和“end”坐标的数据。

我的问题是我不知道如何使用 pandas 根据坐标(chrom、start、end)合并行,然后应用求和和 …

python bioinformatics pandas

5
推荐指数
1
解决办法
5283
查看次数

如何将范围集合减少到最小范围集

我正在尝试从范围集合中删除重叠值.

范围由如下字符串表示:

499-505 100-115 80-119 113-140 500-550

我希望将上述内容减少到两个范围:80-140 499-550.这涵盖了所有值,没有重叠.

目前我有以下代码.

cr = "100-115 115-119 113-125 80-114 180-185 500-550 109-120 95-114 200-250".split(" ")
ar = []
br = []

for i in cr:
    (left,right) = i.split("-")
    ar.append(left);
    br.append(right);

inc = 0
for f in br:    

    i = int(f)
    vac = []
    jnc = 0
    for g in ar:
        j = int(g)  
        if(i >= j):
            vac.append(j)
            del br[jnc]
            jnc += jnc 

    print vac 
    inc += inc
Run Code Online (Sandbox Code Playgroud)

我将数组拆分-并将范围限制存储在ar …

python string algorithm list range

3
推荐指数
1
解决办法
138
查看次数

从具有索引的数组填充1D numpy数组

背景

我有一个用零初始化的1D NumPy数组.

import numpy as np
section = np.zeros(1000)
Run Code Online (Sandbox Code Playgroud)

然后我有一个Pandas DataFrame,其中我有两列索引:

d= {'start': {0: 7200, 1: 7500, 2: 7560, 3: 8100, 4: 11400},
    'end': {0: 10800, 1: 8100, 2: 8100, 3: 8150, 4: 12000}}

df = pd.DataFrame(data=d, columns=['start', 'end'])
Run Code Online (Sandbox Code Playgroud)

对于每对索引,我想将numpy数组中相应索引的值设置为True.

我目前的解决方案

我可以通过将函数应用于DataFrame来实现:

def fill_array(row):
    section[row.start:row.end] = True

df.apply(fill_array, axis=1)
Run Code Online (Sandbox Code Playgroud)

我想矢量化这个操作

这正如我所料,但为了它的乐趣,我想矢量化操作.我对此并不十分熟悉,而且我在线搜索并没有让我走上正轨.

如果可能的话,我真的很感激有关如何将其转换为矢量操作的任何建议.

python arrays numpy vectorization pandas

3
推荐指数
1
解决办法
419
查看次数

查找范围值列表中的空白

我在其他编程语言(ruby、C++、JS 等)中发现了许多类似的问题,但在 Python 中却没有。因为Python有例如itertools我想知道我们是否可以在Python中更优雅地做同样的事情。

假设我们有一个“完整范围”,[1,100]然后是“完整范围”内/匹配“完整范围”的范围子集:

  • [10,50]
  • [90,100]

[1,9]在本例中,我们如何提取未覆盖的位置[51,89]

这是一个玩具示例,在我的真实数据集中,范围高达数千。

python range

1
推荐指数
1
解决办法
2458
查看次数