我在NetworkX中有一个有向图.边从0到1加权,表示它们发生的概率.网络连接非常高,所以我想修剪每个节点的边缘,只保留最高概率节点.
我不确定如何迭代每个节点并且只保留in_edges图中的最高权重.是否有networkx功能允许我们这样做?
这是我希望能够做的一个例子.
Nodes:
A, B, C, D
Edges:
A->B, weight=1.0
A->C, weight=1.0
A->D, weight=0.5
B->C, weight=0.9
B->D, weight=0.8
C->D, weight=0.9
Final Result Wanted:
A->B, weight=1.0
A->C, weight=1.0
C->D, weight=0.9
Run Code Online (Sandbox Code Playgroud)
如果一个节点有两条边,并且它们都是最重的,我想保留它们.
我有一个网络,我正试图找出最好的图形表示.我不是图形理论家,而是生物学家,所以请原谅我缺乏技术性.
目前,网络可以被认为如下:"n"个网络层,每个层在节点之间保持不同的边缘集合.每个边都是定向的,并且具有与之相关的概率,但该概率属性直到稍后才被使用.每个层作为单独的图形存储为邻接列表表示中的CSV文件.
使用邻接列表表示,我有一个"摘要"层,其中我压缩所有"n"层,每层为每个节点之间的权重提供值"+1".这当前存储为单独的图形,作为CSV文件,存储在邻接列表表示中.
如果在一对节点之间存在"n"个边缘,则在摘要层中,边缘的权重为"n"; 在任何一对节点之间只能有"n"或更少的边.
我还有一个"全全"图层,它只包含权重为"n"的边.类似地,当前存储为CSV文件,在邻接列表表示中.
最后,我有一个"最可能完全唯一"的层.在这一层中,概率起作用.对于每个"全部"层边缘,我乘以与n个边缘相关的所有概率(回想一下:"完整"层是"n"边缘的总和,每个边缘都有一个概率).
在我对这个网络的分析中,有时能够在任何"n"层和"摘要"层之间切换是很方便的.但是,最方便的最小存储格式(即没有预先计算任何东西)是将各个边存储为一个表(如下图所示):
|Node 1 | Node 2 | Layer 1 Weight | Layer 2 Weight | ... | Layer n Weight |
|-------|--------|----------------|----------------|-----|----------------|
| x | y | 0.99 | 1.00 | ... | 1.00 |
| x | z | 0.98 | 1.00 | ... | 0.97 |
| y | z | 0 (no edge) | 1.00 | ... | 1.00 |
Run Code Online (Sandbox Code Playgroud)
我说这种格式很方便,因为我能够很容易地生成这样的表格.
所以这是我的问题:在NetworkX中是否可以存储这样的图形(多层,指向每一层)?如果有可能,那么我想能够编写函数来实时计算"摘要"图,"完全"图形和"最可能完全"图形,因为它们是彼此的子集.我还可以想象编写计算其他图形的函数,例如图形,它还将多个边缘的互补集合并入到没有完整边缘进入每个节点的节点中.
但是,检查NetworkX文档,我找不到像我正在寻找的东西.我能找到的最好的是"多图",它允许节点之间有多条边,但每条边都必须是无向的.我在这里错过了什么吗?
此外,是否有更好的代表我想要实现的目标?同样,我在这里缺乏图论的经验,所以我可能会遗漏一些东西.非常感谢(提前)给每个需要时间回应的人!
在我的数据集中,我有一个date列,其中的数据是混合格式。
YYYY(例如2009)MMM-YY(例如Jan-08)MM/DD/YYYY(例如01/15/2006)如何删除不遵循格式的条目MM/DD/YYYY?我不太确定从哪里开始。
下面,我将.head()的数据提供为dict。
{'Collection Date': {0: '2001',
1: '2002',
2: '2006',
3: '2/19/2006',
4: '2/28/2006'},
'Complete Genome': {0: 'No', 1: 'No', 2: 'No', 3: 'No', 4: 'No'},
'Country': {0: 'Egypt', 1: 'Egypt', 2: 'Egypt', 3: 'Egypt', 4: 'Egypt'},
'Flu Season': {0: '-N/A-', 1: '-N/A-', 2: '-N/A-', 3: '-N/A-', 4: '-N/A-'},
'Host Species': {0: 'IRD:Human',
1: 'IRD:Human',
2: 'IRD:Bird/Avian',
3: …Run Code Online (Sandbox Code Playgroud) 作为我自己对基因型网络研究的一部分,我有一段代码,我试图在其中从字符串列表构建一个单差网络。程序是这样的:
我现在拥有的代码块是这样的:
from itertools import combinations
import Levenshtein as lev # a package that wraps a C-implemented levenshtein distance
import networkx as nx
strings = [...list of strings...]
G = nx.Graph()
for (s1, s2) in combinations(strings, 2):
if s1 not in G.nodes():
G.add_node(s1)
if s2 not in G.nodes():
G.add_node(s2)
if lev.distance(s1, s2) == 1:
G.add_edge(s1, s2)
Run Code Online (Sandbox Code Playgroud)
显然没有办法提高图构建过程的计算复杂度——它总是O(n**2). 至少,以我有限的知识,这就是我的想法——也许我错了?
也就是说,考虑到我需要进行的比较数量的正常规模(约 2000-5000),如果我能获得几个数量级的加速,总体而言,那么实际计算时间仍然是可以接受的- 使用当前的 Python 实现,构建图形需要大约几天的时间。使用正确的导入(下面未说明),我尝试了下面的 Cython 实现,但无法弄清楚如何使其更快:
cpdef cython_genotype_network(sequences):
G = nx.Graph()
cdef:
unicode s1
unicode s2 …Run Code Online (Sandbox Code Playgroud) 这里仍然是NetworkX的新手,但我希望能够查询NetworkX图以查找节点集群中的所有节点.这是我生成的示例图:

如您所见,有节点集群.在每个集群中,每个节点都连接到每个其他节点.您可以在下面放大五个这样的聚类中看到:

我希望能够找到如何提取每个节点的节点.每个节点都用一个长名称命名(例如,"A/Vietnam/2009/8/431"),我知道如何使用NetworkX的功能剔除单个节点,但我不知道如何连接所有节点该群集中的节点.首选语言是Python(2.7),我一直在使用NetworkX包.
谢谢大家!
我希望这是发布的正确位置 - 如果没有,我愿意改为SO.
无论如何,我使用MDS来帮助我找到数据集的二维表示.基本上,这些是多年蛋白质数据中氨基酸残基的pKa值 - 其核心是相同比例的十进制数.有很多位置(~600行),有很多年(~12列).
我的问题是:MDS是数据矩阵(年份与职位)的正确输入,还是我可以加入相关矩阵(年与年)?我问,因为API文档与书面描述冲突.
API文档说数据矩阵:http://scikit-learn.org/stable/modules/generated/sklearn.manifold.MDS.html#sklearn.manifold.MDS(即n_samples,n_features).
书面描述说"输入相似度矩阵":http://scikit-learn.org/stable/modules/manifold.html
说我有some_data形状(1, n).我有新incoming_data的形状(1, n±x),其中x是一些小于的正整数n.我想挤压或伸展incoming_data,使其长度与之相同n.如何使用SciPy堆栈完成此操作?
这是我想要完成的一个例子.
# Stretch arr2 to arr1's shape while "filling in" interpolated value
arr1 = np.array([1, 5, 2, 3, 7, 2, 1])
arr2 = np.array([1, 5, 2, 3, 7, 1])
result
> np.array([1, 5, 2, 3, 6.x, 2.x 1]) # of shape (arr1.shape)
Run Code Online (Sandbox Code Playgroud)
另一个例子:
# Squeeze arr2 to arr1's shape while placing interpolated value.
arr1 = np.array([1, 5, 2, 3, 7, 2, 1])
arr2 …Run Code Online (Sandbox Code Playgroud) 如果我想将两个脚注并排引用,用逗号分隔,这样做的语法是什么?该Pandoc文档似乎没有规定如何。
作为我试图完成的一个例子:
Some text here [^fn1, ^fn2] ## this clearly isn't the syntax, I've tried this.
变成:
这里有一些文字1, 2。
pyjanitor这是针对该项目提出的问题。
我已经构建了分为多个作业的管道,并且这些作业被设计为并行运行。但是,我注意到即使在合并 PR 后也会触发构建。因此,我的问题有两个:
更新:
我认为这个问题应该与建议的重复问题不同,因为我的问题是如何在 PR 合并后禁用构建,而不是在 PR 制作之前强制构建。
查看建议的副本,我没有找到任何有关如何配置 Pipeline YAML 以在 PR 合并后禁用构建的信息。建议的“分支策略”也不会显示在我的管道仪表板上。
我有一个 Pandas DataFrame,它列出了 96 孔或 384 孔板中的孔,我希望对它们进行排序。这些井被标记为:
A1, A2, A3, ..., A10, A11, A12, B1, B2, B3,...
Run Code Online (Sandbox Code Playgroud)
在我的 Pandas DataFrame 中,按well列排序给了我:
A1, A10, A11, A12, A2, A3, ...
Run Code Online (Sandbox Code Playgroud)
但是,上面的排序顺序是我想要的。
除了将列拆分为字母和数字列,然后按两列排序之外,是否还有更智能或更简洁的替代方法?
python ×7
networkx ×3
graph ×2
numpy ×2
pandas ×2
python-2.7 ×2
algorithm ×1
arrays ×1
azure-devops ×1
combinations ×1
csv ×1
cython ×1
date ×1
datetime ×1
latex ×1
pandoc ×1
pdflatex ×1
scikit-learn ×1