微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python中的代码效率问题——如何减少基于节点之间的欧几里德距离生成网络时所用的时间

如何解决Python中的代码效率问题——如何减少基于节点之间的欧几里德距离生成网络时所用的时间

我想根据定义为节点之间的欧几里德距离的相似性度量在 python 中的网络节点之间创建链接。问题是代码仅创建网络就需要 200 秒,当我调整模型并且代码执行至少 100 次时,这段较长的执行时间使整个代码运行缓慢。

因此,节点实际上是客户。我定义了一个类。它们具有存储在 csv 文件中的两个属性性别(数字;由数字 0 或 1 指定)和年龄(从 24 到 44 不等)。我在这里生成这样的:

#number of customers
ncons = 5000
gender = [random.randint(0,1) for i in range(ncons)]
age = [random.randint(22,39) for i in range(ncons)]
customer_df = pd.DataFrame(
    {'customer_gender': gender,'customer_age': age
    })
customer_df.to_csv('customer_df.csv',mode = 'w',index=False)

欧几里得距离 delta_ik 为

enter image description here

following。公式中, n属性个数。这里的属性是性别和年龄。对于客户 i k S_f,i - S_f,k属性 f = 1,2间的差值,其 id 除以所有客户的属性 f 的最大范围({{ 1}})。所以距离是属性中的距离而不是地理位置。 然后我定义相似性度量 H_ik,它从 delta_ik 创建一个 0 到 1 之间的数字,如下所示:

customer similarity

。最后,对于客户max d_f i,我生成一个0到1之间的随机数rho。如果rho小于H_ik,则节点连接。

因此,将 delta_ik 保存在矩阵中然后使用它来生成网络的代码如下所示:

 k

如果您能给我一些关于使用更多 Pythonic 命令来减少运行时间的建议,我将不胜感激。

非常感谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。