我有一个带有制表符分隔列的文本文件。
817619994 0.0 2369858 2369019
817619994 0.0 652427 651270
817619994 1e-117 2369858 2369019
817619994 1e-124 652427 651294
817619994 1e-147 2369858 2369019
817619994 1e-148 2369858 2369019
817619994 1e-158 2369858 2369019
817619994 1e-159 2369858 2369019
817619994 3e-118 652427 651291
817619994 3e-159 2369858 2369019
817619994 3e-94 652427 651291
817619994 4e-159 2369858 2369019
817619994 5e-118 652427 651291
817619994 6e-147 2369858 2369019
我想根据最后两列3和4中值的接近程度为每行分配一个ID。我想使用600的截止值。生成的文本文件如下所示:
817619994 0.0 2369858 2369019 1
817619994 0.0 652427 651270 2
817619994 1e-117 2369858 2369019 1
817619994 1e-124 652427 651294 2
817619994 1e-147 2369858 2369019 1
817619994 1e-148 2369858 2369019 1
817619994 1e-158 2369858 2369019 1
817619994 1e-159 2369858 2369019 1
817619994 3e-118 652427 651291 2
817619994 3e-159 2369858 2369019 1
817619994 3e-94 652427 651291 2
817619994 4e-159 2369858 2369019 1
817619994 5e-118 652427 651291 2
817619994 6e-147 2369858 2369019 1
如果有一个不太复杂的方法,我将不胜感激,但我已经开始沿着以下几行,将一列中的所有值与同一列中的所有其他值进行比较:
我使用numpy为第3列和第4列构建了一个差异数组。例如,Array3显示了第3列中每个值与第3列中每隔一个值之间的绝对差值(26乘26阵列)。 Array4与第4列相同。
$ python
>>>import numpy as np
>>>col3, col4 = np.loadtxt('test.txt', usecols=(2,3), unpack=True)
>>>A = col3
>>>B = col3
>>>Array3 = np.abs(np.subtract.outer(A, B))
(注意在numpy字段中从0开始计数)
从第1行开始,可以任意分配给第1组,我现在希望根据Array3和Array4中的值为每一行分配1,2,3等的组ID (例如,如果Array3 [x,1]< 600&& Array4 [x,1]< 600,则该行是第1组,其中600是截止的。)
如果我可以编写脚本,我认为这会找到属于第1组的行。其他行将在新列5中留空。
然后我遇到了寻找第2,3组等问题。
可能是遇到不满足相同组标准的第一行被分配给组2,并且该组用作搜索组2成员,忽略已分配给组(1)的那些成员。以下组也是如此(尽管在这个例子中只有2组)。