我正在尝试跟踪Python(2.7)中的内存泄漏.我找到了gc.get_referrers,但是不明白输出.删除后dying_node(除了我作为狩猎的一部分创建的列表之外,应删除所有引用),我的代码中有:
gc.collect()
print "done dying: ", getrefcount(dying_node) #note, includes the reference from getrefcount
referrers = gc.get_referrers(dying_node)
print "referrers: "
for referrer in referrers:
print referrer
Run Code Online (Sandbox Code Playgroud)
产生输出:
> done dying: 4
> referrers:
> [<__main__.Node instance at 0x104e53cb0>, <__main__.Node instance at 0x104e53b90>, <__main__.Node instance at 0x104e53b00>, <__main__.Node instance at 0x104e53d40>, <__main__.Node instance at 0x104e53ab8>, <__main__.Node instance at 0x104e53bd8>, <__main__.Node instance at 0x104e53a70>, <__main__.Node instance at 0x104e53c20>, <__main__.Node instance at 0x104e53c68>, <__main__.Node instance at 0x104e53b48>]
> [<__main__.Node instance at 0x104e53c20>, …Run Code Online (Sandbox Code Playgroud) 直截了当的问题:我想检索连接到NetworkX图中给定节点的所有节点,以便创建子图.在下面显示的示例中,我只想提取圆圈内的所有节点,给出其中任何一个节点的名称.
我尝试了以下递归函数,但是命中了Python的递归限制,即使此网络中只有91个节点.
无论下面的代码是否有错误,我做什么的最佳方法是什么?我将在各种大小的图形上运行此代码,并且不会事先知道最大递归深度.
def fetch_connected_nodes(node, neighbors_list):
for neighbor in assembly.neighbors(node):
print(neighbor)
if len(assembly.neighbors(neighbor)) == 1:
neighbors_list.append(neighbor)
return neighbors_list
else:
neighbors_list.append(neighbor)
fetch_connected_nodes(neighbor, neighbors_list)
neighbors = []
starting_node = 'NODE_1_length_6578_cov_450.665_ID_16281'
connected_nodes = fetch_connected_nodes(starting_node, neighbors)
Run Code Online (Sandbox Code Playgroud) tl/dr:如何使用 Guppy 获取 python 程序的当前内存使用情况?有简单的命令吗?
我正在尝试使用 guppy 在 python 程序中跟踪内存使用情况。这是我第一次使用 guppy,所以我不太确定它的行为方式。我想要的是能够在模拟中随着“时间”的进展绘制总使用量。这是我可以做的一些基本代码:
from guppy import hpy
import networkx as nx
h = hpy()
L=[1,2,3]
h.heap()
> Partition of a set of 89849 objects. Total size = 12530016 bytes.
> Index Count % Size % Cumulative % Kind (class / dict of class)
> 0 40337 45 3638400 29 3638400 29 str
> 1 21681 24 1874216 15 5512616 44 tuple
> 2 1435 2 1262344 10 6774960 54 dict (no owner) …Run Code Online (Sandbox Code Playgroud) 我经常发现自己编写的代码如下:
mylist = [247]
while mylist:
nextlist = []
for element in mylist:
print element
if element%2==0:
nextlist.append(element/2)
elif element !=1:
nextlist.append(3*element+1)
mylist = nextlist
Run Code Online (Sandbox Code Playgroud)
好的 - 它通常不是这么简单[通常它确实是长列表,我只是选择了这个(参见xkcd)的乐趣],但我创建了一个列表,迭代它用这些元素做事情.在这样做的过程中,我将发现需要迭代的新事物,然后将它们放入一个新的列表中,然后迭代.
似乎可以写:
mylist=[247]
for element in mylist:
print element
if element%2 == 0:
mylist.append(element/2)
elif element !=1:
mylist.append(element*3+1)
Run Code Online (Sandbox Code Playgroud)
我知道在迭代时修改列表被认为是危险的,但在这种情况下我想迭代新元素.
这样做会有危险吗?我唯一能想到的是列表可能会增长并占用大量内存(在我的许多情况下,我实际上希望最终得到整个列表).还有其他我无视的吗?
请注意:Python:迭代时将元素添加到列表是相关的,但是解释了创建列表副本的方法,以便我们可以避免迭代原始列表.我问的是我的具体情况是否有任何错误,我实际上希望扩展我的迭代.
编辑:这里更接近真正的问题.假设我们想要生成网络的"k-core".也就是说,删除程度小于k的所有节点.从剩余网络中删除程度小于k的所有节点.重复,直到没有人删除.该算法将首先找到少于k个节点,将它们放在to_delete列表中.然后,当删除节点时,如果邻居的度数变为k-1,则将其添加到列表中.这可以通过以下方式完成:
delete_list = [node for node in G.nodes() if G.degree(node)<k]
for node in delete_list:
nbrs = G.neighbors(node)
for nbr in nbrs:
if G.degree(nbr)==k:
delete_list.append(nbr)
G.remove_node(node)
Run Code Online (Sandbox Code Playgroud) 我一直在尝试在 mac os x 上安装 pycairo。我收到一条错误消息,
最初我得到了'pkg-config' not found。通过brew安装后,我得到了Package cairo was not found in the pkg-config search path。原则上我可以尝试编辑搜索路径,但由于这是通过 pip 进行的,所以我希望这一切都能得到解决。有没有办法告诉 pip 将内容放在 pkg-config 知道要查找的地方?
这是完整的消息。
> pip install pycairo
Collecting pycairo
Using cached https://files.pythonhosted.org/packages/48/20/5e83af98eb897935bf7dc39455e892ba866feebb9b7c3b392982866f9958/pycairo-1.18.1.tar.gz
Building wheels for collected packages: pycairo
Building wheel for pycairo (setup.py) ... error
ERROR: Complete output from command /Applications/anaconda/bin/python -u -c 'import setuptools, tokenize;__file__='"'"'/private/var/folders/f2/bzrj46j11gzdk19j91tp1sq80000gq/T/pip-install-lahb8lq4/pycairo/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /private/var/folders/f2/bzrj46j11gzdk19j91tp1sq80000gq/T/pip-wheel-scnvplas --python-tag cp36:
ERROR: running bdist_wheel
running build
running build_py
creating …Run Code Online (Sandbox Code Playgroud) 我有这个图表:
%matplotlib inline
import networkx as nx
G = nx.Graph()
G.add_edge(1, 2)
G.add_edge(2, 3)
G.add_edge(3, 4)
G.add_edge(3, 5)
G.add_edge(4, 6)
G.add_edge(5, 6)
G.add_edge(3, 7)
G.add_edge(7, 6)
G.add_edge(6, 8)
G.add_edge(8, 9)
nx.draw(G, pos=nx.spring_layout(G), with_labels=True)
Run Code Online (Sandbox Code Playgroud)
是否可以在不使用nx.subgraph(G, [3,4,5,6,7]). 我的意思是,如果我知道有这个子图,但我不知道例如第 5 个子图怎么办?
当使用 python networkx 时,是否可以向单个节点添加多个标签(即主标签,然后每个节点中的子标签)?
我正在构建一个连接到某个没有互联网访问权限的 WiFi 网络的应用程序,我通过该应用程序(而不是通过设置)添加了网络配置,以便我能够启用/禁用该网络。
该应用程序的工作原理如下:
1-用户按下按钮。
2-我检查WiFi是否启用,如果没有,我启用它。另外,如果手机已经连接到 WiFi 网络,我会断开它与该网络的连接并连接到我的(工作正常)。
3-我使用以下方法连接到网络(启用WiFi后):
mWifiManager.enableNetwork(networkId, true);//I have the network ID from the list of configured networks.
mWifiManager.reconnect();
Run Code Online (Sandbox Code Playgroud)
但是,如果 WiFi 最初被禁用,这似乎不起作用,WiFi 被启用但并不总是连接到我的网络,它有时会连接到其他配置的网络(如果可用)。
我尝试为我的网络提供高优先级(高于所有其他配置的网络),但没有任何区别。
在启用 WiFi 之前,我还尝试启用网络,但它不起作用。
我尝试添加一个 mWifiManager.disconnect(); 但没有变化。
mWifiManager.disonnect();
mWifiManager.enableNetwork(networkId, true);
mWifiManager.reconnect();
Run Code Online (Sandbox Code Playgroud)
所以我有一些问题:
Q1-为什么当您已经连接到 WiFi 网络时它可以工作,但如果禁用 WiFi 则不能?
Q2-是否有任何有效的方法可以强制应用程序连接到特定网络?(我正在使用 Android 7.0 API 24)。
这是我的代码:
int mID;
String mSSID;
String mPASSWORD;
public void connectToWiFi(String ssid, String key) {
mSSID = ssid;
mPASSWORD = key;
if (!mWifiManager.isWifiEnabled()) {
WifiUtils.withContext(mContext).enableWifi(this::enableResult);
//Also tried
// boolean wifiEnabled …Run Code Online (Sandbox Code Playgroud) 在此图中,颜色表示每条线下端的水平偏移。我希望图例中出现一个颜色条(带有“开始”和“停止”),显示颜色的含义。
这是我的代码:
import matplotlib.pyplot as plt
import matplotlib.colors as colors
import matplotlib.cm as cmx
plt.clf()
plt.plot([0,100], [0,100], '--', linewidth=3, color='k', label = 'start')
plt.plot([100,100],[0,100], '-.', linewidth=3, color = 'k', label = 'stop')
jet = plt.get_cmap('jet')
cNorm = colors.Normalize(vmin=0, vmax=99)
scalarMap = cmx.ScalarMappable(norm=cNorm, cmap=jet)
for offset in range(1,100):
colorVal = scalarMap.to_rgba(offset)
plt.plot([offset, 100], [0,100], color=colorVal)
plt.legend()
plt.show()
Run Code Online (Sandbox Code Playgroud)
因此,理想情况下,我会拥有看起来像标准颜色条的东西,其范围从 0 到 100,但出现在带有 label 的图例中'offset'。
我已经投影了一个二部图并制作了一个新的加权图。我想绘制图形,并显示边缘权重。
这是我的尝试。
import networkx as nx
import matplotlib.pyplot as plt
from networkx.algorithms import bipartite
g=nx.Graph()
g.add_nodes_from(['s1','s2','s3','s4','s5'],bipartite=0)
g.add_nodes_from(['t1','t2','t3','t4'],bipartite=1)
g.add_edges_from([('s1','t1'),('s1','t4'),('s2','t1'),('s2','t2'),('s3','t1'),('s3','t4'),('s4','t3'),('s5','t2'),('s5','t3')])
l=bipartite.weighted_projected_graph(g,['s1','s2','s3','s4','s5'])
nx.draw(l, with_labels=True)
plt.show()
Run Code Online (Sandbox Code Playgroud)
节点标签出现,但不出现边权重。如何显示边权重?
python ×9
networkx ×4
graph ×2
android ×1
api ×1
colorbar ×1
guppy ×1
loops ×1
matplotlib ×1
memory-leaks ×1
pip ×1
pkg-config ×1
pycairo ×1
wifi ×1