我正在与经历了许多破坏性事件的网络合作。因此,许多节点由于给定的事件而失败。因此,从左到右的图像之间存在过渡:
我的问题:如何找到断开连接的子图,即使它们只包含 1 个节点?我的目的是计算它们并渲染为失败,因为在我的研究中这适用于它们。半隔离节点是指隔离节点组,但彼此连接。
我知道我可以找到这样的孤立节点:
def find_isolated_nodes(graph):
""" returns a list of isolated nodes. """
isolated = []
for node in graph:
if not graph[node]:
isolated += node
return isolated
Run Code Online (Sandbox Code Playgroud)
但是您将如何修改这些行,使它们也能找到孤立节点组,如右侧图片中突出显示的那些?
我的理论尝试
它看起来像这个问题被寻址的洪水填充算法,这说明这里。但是,我想知道如何可以简单地计算巨型组件中的节点数,然后从在第 2 阶段看起来仍处于活动状态的节点数中减去它。您将如何实现这一点?
假设我有一个pandas数据帧字典,其中键是0, 1, 2, ..., 999,而值是像这样的数据帧(test_df):
A B C
0 1.438161 -0.210454 -1.983704
1 -0.283780 -0.371773 0.017580
2 0.552564 -0.610548 0.257276
3 1.931332 0.649179 -1.349062
4 1.656010 -1.373263 1.333079
5 0.944862 -0.657849 1.526811
Run Code Online (Sandbox Code Playgroud)
假设索引对您没有任何意义,并且您希望创建一个新的数据框,其中列A和B连接:
mydf=pd.concat([test_df[0]['A'],test_df[0]['B']], axis=1, keys=['A','B'])
现在,我可以在for循环中使用这一行来迭代我的数据帧字典中的所有键吗?
如果没有,那么另一种方式是什么?结果将是一个包含两列A和B/或6x1000行的数据框.因此,索引列会从去0到5999.
我需要生成一个绘图,其中一条线在Pigment Blue(hex= #333399)和o标记中绘制.
我知道我可以o通过调用以下方式用标记绘制蓝色线:
line1 = ax1.plot(x, myvalues,'bo-', label='My Blue values')
问题:如果我想保留标记并将颜色更改b为#333399?,应如何更改线条?
假设我有一个像这样的列表:
mydict={10:[],20:[],30:[],40:[],50:[1],60:[],70:[1],80:[7, 2, 7, 2, 2, 7, 2],90:[5, 2, 2, 6, 2, 3, 1, 2, 1, 2],...}
我想计算:dict中每个列表的min,max,median,1st和3rd四分位数.我试着min和max第一,就像这样:
mins_mydict={k:min(v) for k,v in mydict.items()}
maxes_mydict={k:max(v) for k,v in mydict.items()}
但我得到这个错误:ValueError: min() arg is an empty sequence.同样的max.是因为我的一些名单是空的吗?
如何创建检查是否的异常len(list)=0?
假设我有一个带10节点的图,我想在以下情况下绘制它:
如何确保第二个图与第一个图具有完全相同的位置?
我的尝试生成了两个以不同布局绘制的图形:
import networkx as nx
import matplotlib.pyplot as plt
%pylab inline
#Intact
G=nx.barabasi_albert_graph(10,3)
fig1=nx.draw_networkx(G)
#Two nodes are removed
e=[4,6]
G.remove_nodes_from(e)
plt.figure()
fig2=nx.draw_networkx(G)
Run Code Online (Sandbox Code Playgroud) 给定一个像这样的简单无向网格网络:
import networkx as nx
from pylab import *
import matplotlib.pyplot as plt
%pylab inline
ncols=3
N=3
G=nx.grid_2d_graph(N,N)
labels = dict( ((i,j), i + (N-1-j) * N ) for i, j in G.nodes() )
nx.relabel_nodes(G,labels,False)
inds=labels.keys()
vals=labels.values()
inds=[(N-j-1,N-i-1) for i,j in inds]
pos2=dict(zip(vals,inds))
nx.draw_networkx(G, pos=pos2, with_labels=True, node_size = 200, node_color='orange',font_size=10)
plt.axis('off')
plt.title('grid')
plt.show()
Run Code Online (Sandbox Code Playgroud)
考虑到每条边都有与其长度相对应的权重:
#Weights
from math import sqrt
weights = dict()
for source, target in G.edges():
x1, y1 = pos2[source]
x2, y2 = pos2[target]
weights[(source, target)] = round((math.sqrt((x2-x1)**2 + …Run Code Online (Sandbox Code Playgroud) python minimum-spanning-tree spanning-tree networkx weighted-graph
d1 = {'a':5, 'b':6, 'c': 3}
d2 = {'a':6, 'b':7, 'c': 4}
for (k1,v1), (k2,v2) in zip(d1.items(), d2.items()):
print k1, v1
print k2, v2
Run Code Online (Sandbox Code Playgroud)
但是如何将其有效地扩展到包含20个不同的字典的列表中,而这些字典恰巧具有相同的键?
mylist=[d1, d2, d3, ..., d20]
Run Code Online (Sandbox Code Playgroud) 假设您有以下数据集:
a=[1, 2, 8, 9, 5, 6, 8, 5, 8, 7, 9, 3, 4, 8, 9, 5, 6, 8, 5, 8, 7, 9, 10]
b=[1, 8, 4, 1, 2, 4, 2, 3, 1, 4, 2, 5, 9, 8, 6, 4, 7, 6, 1, 2, 2, 3, 10]
Run Code Online (Sandbox Code Playgroud)
并说你生成他们的直方图:
import matplotlib.pyplot as plt
fig, ax = plt.subplots(1,2,figsize=(16, 8))
plt.subplot(121)
plot1=plt.hist(a, bins=[0,1,2,3,4,5,6,7,8,9,10],
normed=True,edgecolor='k',linewidth=1.0,color='blue')
plt.title("a")
plt.subplot(122)
plot2=plt.hist(b, bins=[0,1,2,3,4,5,6,7,8,9,10],
normed=True,edgecolor='k',linewidth=1.0,color='green')
plt.title("b")
plt.show()
Run Code Online (Sandbox Code Playgroud)
你如何制作一个具有相同箱子的条形图和高度两个直方图之间的差异?
如果您这样做:
diff=plt.bar([1,2,3,4,5,6,7,8,9,10],
height=(plot1[0]-plot2[0]), edgecolor='black',
linewidth=1.2, color='red',width = 1)
plt.title("a-b")
Run Code Online (Sandbox Code Playgroud)
给定以下数据框df,其中df['B']=df['M1']+df['M2']:
A M1 M2 B
1 1 2 3
1 2 NaN NaN
1 3 6 9
1 4 8 12
1 NaN 10 NaN
1 6 12 18
Run Code Online (Sandbox Code Playgroud)
我希望NaNin列B等于in 的相应值,M1或者M2前提是后者不是NaN:
A M1 M2 B
1 1 2 3
1 2 NaN 2
1 3 6 9
1 4 8 12
1 NaN 10 10
1 6 12 18
Run Code Online (Sandbox Code Playgroud)
建议使用以下答案:
df.loc[df['B'].isnull(),'B'] = df['M1'],但此行的结构允许同时考虑 …
在Python 3.6.3中,我有以下dict D1:
D1 = {0: array([1, 2, 3], dtype=int64), 1: array([0,4], dtype=int64)}
Run Code Online (Sandbox Code Playgroud)
数组中的每个值都是另一个dict的键的索引D2:
D2 = {'Jack': 1, 'Mike': 2, 'Tim': 3, 'Paul': 4, 'Tommy': 5}
Run Code Online (Sandbox Code Playgroud)
我正在尝试D3使用相同的键创建第三个dict,D1并且作为值D2对应于索引的键D1.values().
我的目标是:
D3 = {0: ['Mike','Tim','Paul'], 1: ['Jack','Tommy']}
Run Code Online (Sandbox Code Playgroud)
我的方法是局部的,因为我很难弄清楚如何告诉D3从中获取密钥D1和来自的值D2.我对此不太确定and.有任何想法吗?
D3 = {key:list(D1.values())[v] for key in D1.keys() and v in D2[v]}
Run Code Online (Sandbox Code Playgroud) 我有两个要写入新xlsx文件的列表:
list1=[1,2,3,4]
list2=[A,B,C,D]
Run Code Online (Sandbox Code Playgroud)
我想list1转储到A列和list2B列:
COLUMN A COLUMN B
1 A
2 B
3 C
4 D
Run Code Online (Sandbox Code Playgroud)
这是我的看法,但是会引发错误:ValueError: Invalid column index 0。
from openpyxl import load_workbook
from openpyxl import Workbook
from openpyxl.compat import range
from openpyxl.cell import get_column_letter
import os
wb = Workbook()
newdir=r'C:\Users\MyName\Desktop'
os.chdir(newdir)
dest_filename = 'Trial.xlsx'
ws=wb.active
for r in range(1,5):
for c in 'A':
ws.cell(row=r,column=0).value=list1[r]
for c in 'B':
ws.cell(row=r,column=1).value=list2[r]
wb.save(filename = dest_filename)
Run Code Online (Sandbox Code Playgroud)
错误指向最后一行。怎么了
python ×11
dictionary ×4
for-loop ×3
matplotlib ×3
networkx ×3
dataframe ×2
pandas ×2
bar-chart ×1
colors ×1
components ×1
connectivity ×1
count ×1
file-writing ×1
histogram ×1
markers ×1
max ×1
min ×1
nan ×1
numpy ×1
openpyxl ×1
plot ×1
xlsx ×1