小编Joe*_*oel的帖子

了解gc.get_referrers

我正在尝试跟踪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)

python garbage-collection memory-leaks

7
推荐指数
1
解决办法
2224
查看次数

在NetworkX图中获取连接的节点

直截了当的问题:我想检索连接到NetworkX图中给定节点的所有节点,以便创建子图.在下面显示的示例中,我只想提取圆圈内的所有节点,给出其中任何一个节点的名称.

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)

python graph networkx

7
推荐指数
3
解决办法
5007
查看次数

从 Guppy 获取当前内存使用情况的简单方法

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)

python guppy

6
推荐指数
1
解决办法
6705
查看次数

如果我想迭代添加的值,在迭代期间附加到列表是否安全?

我经常发现自己编写的代码如下:

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)

python loops

6
推荐指数
1
解决办法
759
查看次数

pip install pycairo 在 osx 上失败:“pkg-config”搜索路径问题

我一直在尝试在 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)

python pip pkg-config pycairo

6
推荐指数
1
解决办法
6765
查看次数

获取两个节点之间的节点子图?

我有这个图表:

%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 graph networkx

5
推荐指数
1
解决办法
2618
查看次数

使用 python networkx 时是否可以向单个节点添加多个标签(即主标签,然后是子标签)?

当使用 python networkx 时,是否可以向单个节点添加多个标签(即主标签,然后每个节点中的子标签)?

python networkx

5
推荐指数
1
解决办法
2006
查看次数

强制 Android 应用连接到某个 WiFi 网络

我正在构建一个连接到某个没有互联网访问权限的 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)

api android wifi

5
推荐指数
1
解决办法
1301
查看次数

如何将颜色条放入 matplotlib 图例中

我有产生这个数字的代码: 在此输入图像描述

在此图中,颜色表示每条线下端的水平偏移。我希望图例中出现一个颜色条(带有“开始”和“停止”),显示颜色的含义。

这是我的代码:

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'。

python matplotlib colorbar

5
推荐指数
1
解决办法
2717
查看次数

显示投影网络中边的权重

我已经投影了一个二部图并制作了一个新的加权图。我想绘制图形,并显示边缘权重。

这是我的尝试。

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 networkx

4
推荐指数
1
解决办法
2281
查看次数