Yan*_* P. 5 python numpy networkx
大家好,我想计算节点坐标,然后将图形导出到GEXF并用Gephi进行处理.但是当我运行以下代码时
import networkx as nx
import numpy as np
....
area_ratios = [np.sum(new[:,0])/Stotal, np.sum(new[:,1])/Stotal, np.sum(new[:,2])/Stotal]
X = np.array([0, -sqrt(3)/2 * area_ratios[1] , sqrt(3)/2 * area_ratios[2]])
Y = np.array([ area_ratios[0], -1/2 * area_ratios[1] , -1/2 * area_ratios[2]])
point = (np.sum(X), np.sum(Y))
graph.add_node(node_name, {'x-coord': np.asscalar(point[0]*SCALE_FACTOR),
'y-coord': np.asscalar(point[1]*SCALE_FACTOR), 'size': Stotal*3})
nx.write_gexf(graph, PATH + 'mygraph.gexf')
Run Code Online (Sandbox Code Playgroud)
它给了我一个KeyError: <type 'numpy.float64'>尽管np.asscalar意味着将相关属性转换为兼容的python类型.
有任何想法吗?
看起来很久以前就解决了这个问题但我发现我的代码在使用pandas数据框中的浮点值时遇到了类似的问题.解决方案在评论中,但我花了一段时间来弄清楚,所以我想我可能会澄清.
如果您从这样的数据帧中创建节点:
G.add_node(df2.loc[row,door_col],
attr_dict={'dropoff':df2.loc[row,'A'],
'pageLoadTime':df2.loc[row,'B'],
'pageviews':df2.loc[row,'C'],
'sessions':df2.loc[row,'D'],
'entrances':df2.loc[row,'E'],
'exits':df2.loc[row,'F'],
'timeOnPage':df2.loc[row,'G'],
'classesB':df2.loc[row,'H']})
Run Code Online (Sandbox Code Playgroud)
假设cols ag是浮点数,它们是np.float64值,而不是浮点值.nx.write_gexf()会崩溃.然而,简单的解决方法是使用以下内容将它们强制转换为简单值:
G.add_node(df2.loc[row,door_col],
attr_dict={'dropoff':float(df2.loc[row,'A']),
'pageLoadTime':float(df2.loc[row,'B']),
'pageviews':float(df2.loc[row,'C']),
'sessions':float(df2.loc[row,'D']),
'entrances':float(df2.loc[row,'E']),
'exits':float(df2.loc[row,'F']),
'timeOnPage':float(df2.loc[row,'G']),
'classesB':str(df2.loc[row,'H'])})
Run Code Online (Sandbox Code Playgroud)
有很多工具都在使用np.float64类型.转换它们总是很容易的选择.
| 归档时间: |
|
| 查看次数: |
2506 次 |
| 最近记录: |