按列

时间:2015-05-17 14:55:29

标签: numpy grouping cluster-analysis

我有一个带有制表符分隔列的文本文件。

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组)。

0 个答案:

没有答案