我有人类的蛋白质 - 蛋白质相互作用数据。基质的大小为< 4850628x3>。前两列是蛋白质,第三列是其自信得分。问题是一半行是重复对
如果蛋白质A与B,C,D相互作用,则称为
如果观察到A与B相互作用的自信得分与B相互作用是0.8
如果我的矩阵为< 4850628x3>一半的行是重复的对。如果我选择Unique(1,:),我可能会丢失一些数据。
但我想< 2425314x3>即没有重复对。我怎样才能有效地做到这一点?
由于 纳雷什
答案 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à!