Matlab:删除重复的互动

时间:2016-01-15 12:41:14

标签: matlab dataset

我有人类的蛋白质 - 蛋白质相互作用数据。基质的大小为< 4850628x3>。前两列是蛋白质,第三列是其自信得分。问题是一半行是重复对

如果蛋白质A与B,C,D相互作用,则称为

  • A B 0.8
  • A C 0.5
  • A D 0.6
  • B A 0.8
  • C A 0.5
  • D A 0.6

如果观察到A与B相互作用的自信得分与B相互作用是0.8

如果我的矩阵为< 4850628x3>一半的行是重复的对。如果我选择Unique(1,:),我可能会丢失一些数据。

但我想< 2425314x3>即没有重复对。我怎样才能有效地做到这一点?

由于 纳雷什

1 个答案:

答案 0 :(得分:0)

假设您在矩阵中存储了每种蛋白质,并且具有唯一的ID (例如:A = 1,B = 2,C = 3 ......)您的示例矩阵将是:

M =

    1.0000    2.0000    0.8000
    1.0000    3.0000    0.5000
    1.0000    4.0000    0.6000
    2.0000    1.0000    0.8000
    3.0000    1.0000    0.5000
    4.0000    1.0000    0.6000

您必须先排列sort两个第一列,这样您才能始终按相同的顺序排列蛋白质对:

M2 = sort(M(:,1:2),2)

M2 =

     1     2
     1     3
     1     4
     1     2
     1     3
     1     4

然后将unique与第二个参数rows一起使用并保留唯一对的索引:

[~, idx] = unique(M2, 'rows')

idx =

     1
     2
     3

最后过滤你的初始矩阵,以保持唯一对。

R = M(idx,:)

R =

    1.0000    2.0000    0.8000
    1.0000    3.0000    0.5000
    1.0000    4.0000    0.6000

Etvoilà!