python - 使用 Python 从数据矩阵生成边缘表的最佳方法
问题描述
我想从数据表中生成基因图。我的表 T 有 2 列,一列“ID”和一列“基因”,其中包含列表。列表包含基因(字符串)。
我希望我的基因作为节点(每个基因一个节点),并且边缘应该连接到共享一个不同 ID 的两个基因。我尝试了很多,但我需要最快的解决方案,因为该表有 70 万到 270 万行。
我应该如何进行?就像我怎样才能在我的表中找到特定基因的所有外观?
我已经实现了生成所有mentionend 基因的nd.array。接下来,我尝试使用 nd.nditer 遍历该列表两次以获取所有成对组合,然后遍历所有行以检查两个基因是否都在其中一个列表中。下面的例子。
接下来,我尝试首先通过查找特定基因的所有 id 来转换表格,然后从那里开始。这个想法是第二个for循环。
两者都不是很有效,所以我问是否有更有效的解决方案来解决这个问题。
for gene1 in nd.nditer(mentionendGenes):
for gene2 in nd.nditer(mentionendGenes):
for row in range(0,len(T['ID'])):
if (gene1 in T['Genes'].values[row]) and (gene2 in T['Genes'].values[row])
G.add_edge(gene1,gene2)
for gene in np.nditer(mentionendGenes):
for listofgenes in np.nditer(T['Genes'].values, flags = ['refs_ok']):
if gene in listofgenes:
doStuff()
解决方案
部分答案:
您的第一种方法可以通过简单地调用来简化(并加速)
import itertools
for row in range(0,len(T['ID'])):
G.add_edges_from(itertools.combinations(T['Genes'].values[row], 2))
您可能会发现通过首先获取所有行的所有边可以进一步改善这一点。为了进行适当的基准测试,我们需要一个大小合适的测试集。
推荐阅读
- r - 合并具有不同小数位的双整数
- java - 无法更改嵌套 ArrayList 中的元素
- webstorm - 按字母顺序对属性进行排序
- python - 预期 min_ndim=2,发现 ndim=1。收到的完整形状:(4,)
- java - NoClassDefFoundError 使用罐子
- hive - PowerBI 和管理映射字段
- angular - 我的表单验证在 ionic 中不起作用我运行我的项目并在控制台上收到错误消息“你忘记调用 'ngZone.run()' 了吗?”
- c - C - 如何在指向结构的指针中打印字符串元素?
- node.js - 如何通过 SSH 连接 mongoDB
- php - 带有过滤器 login_redirect 的 $user 参数仍然返回 null