我开发了一个应用程序,它模拟在网格中移动的N个机器人,这些机器人试图在有限的步骤中最大化访问的网格单元的数量,在目标点进行会议.这一切都正常,但是很慢.它目前是python numpy mathplotlib.

那里的最大机器人可以有100的软限制(如果它可以变得更高,那么它很好).

为此,我做了以下简化:

while steps > 0:

for robot in robots:

agent.calc(robot,steps)

机器人是1×2 numpy数组(x和y坐标).

这里的代理人决定做什么.由于我需要动态切换策略和策略,我无法改变这种逻辑.

agent.calc一个接一个地更新机器人.

cProfiling它返回following.提取顶部

39014272 function calls (39010490 primitive calls) in 150.314 seconds

Ordered by: internal time

ncalls tottime percall cumtime percall filename:lineno(function)

12417735 62.807 0.000 62.807 0.000 distance.py:8(taxicab_distance)

124596 36.882 0.000 36.882 0.000 {numpy.core.multiarray.array}

113657 30.204 0.000 100.800 0.001 logical_agent.py:16(choose_max_distance_to...)

12417013 6.579 0.000 69.384 0.000 squaregrid.py:30(distance)

113700 2.900 0.000 109.769 0.001 logical_agent.py:73(calc)

11652363 2.625 0.000 2.625 0.000 {method 'append' of 'list' objects}

161849 1.653 0.000 1.653 0.000 distance.py:11(euclidean_distance)

113664 1.632 0.000 1.632 0.000 {sorted}

114834 1.185 0.000 1.185 0.000 {method 'keys' of 'dict' objects}

113700 0.695 0.000 1.134 0.000 squaregrid.py:19(neighbours)

我为机器人实施了不同的环境,最重要的是方形.每个环境都有自己的距离函数,因为我打算使用不同的指标,即曼哈顿/出租车和欧几里德.我将距离函数提取到一个自己的distance.py文件中,因为我在几次使用它.

可以看出,taxicab_distance被称为很多,因为代理需要评估机器人四个邻居及其自身到目标点的距离,以查看下一个位置是否仍然可以到达目标并最大化到所有其他机器人的距离优化启发式.

该功能不做任何花哨的事情

def taxicab_distance(u, v):

return np.abs(u[0] - v[0]) + np.abs(u[1] - v[1])

我知道python具有相当高的函数调用开销,我认为这会影响性能. {numpy.core.multiarray.array}可以忽略,我想我知道我在那里做错了什么.

远程呼叫链:代理 – > environment.distance – > taxicab_distance

问题是,如何减少调用函数的开销?我强烈考虑使用pythons c extensibility,cython,更具体.它会起作用吗?还有另一个原因导致它如此缓慢吗?

解决方法:

首先,我将其重写为:

def taxicab_distance(u, v):

return np.sum(np.abs(u - v))

你能一次为很多机器人计算taxicab_distance吗?

标签:python,numpy,cython,performance,overhead-minimization

python 调用函数 开销_减少python中的函数调用开销相关推荐

  1. python quit函数作用_初识Python之基础知识

    安装了Anaconda3以及Jupyter notebook后对Python中的一些基础语法.定义容器,对容器做增删改,定义及调用函数做了学习,并且在notebook中实践敲了代码 数据类型:字符串( ...

  2. python调用excel宏_用Python如何开发Excel宏脚本?新手必学

    今天介绍一个叫 xlpython 的库,通过它我们可以用 Python 来开发 Excel 的宏脚本,真正实现在 Excel 中调用 Python. 基本环境 操作系统:Windows 10 x64 ...

  3. python调用微信客户端_用Python编写的简化版微信客户端

    原标题:用Python编写的简化版微信客户端 原文:A simple WeChat client written in Python supports session persistence. 翻译: ...

  4. python configure函数 循环_使用python统计git仓库中频繁修改的热点函数

    本篇博客以开源代码RT-Thread为例,描述了如何使用python扫描统计代码中频繁修改的函数,帮助我们发现系统中需求变化和BUG制造的重灾区. 需求背景 最近在学习设计模式时,印象深刻的一句话就是 ...

  5. python调用扫描仪设备_在Python中使用串行端口从扫描仪读取输入

    这个问题似乎措辞不当.您可以使用Python的raw_input函数从标准输入中读取数据以提问,如果您知道设备通信的波特率,您可以从串行端口读取字节(否则您将收到垃圾邮件).从这个示例中,我不确定您到 ...

  6. python 高斯函数拟合_在python中拟合任意高斯函数,消耗大量内存

    我试图(在python中)将一系列任意数量的高斯函数(由一个仍在改进的简单算法确定)拟合到一个数据集.对于我当前的样本数据集,我有174个高斯函数.我有一个进行拟合的过程,但基本上是复杂的猜测和检查, ...

  7. python调用ping命令_在Python中调用Ping命令,批量IP的方法

    #!/usr/bin/env python #coding:UTF-8 ''''''' Author: jefferchen@163.com 可在命令行直接带目的IP,也可将IP列表在文本文件中. p ...

  8. python min函数 索引_使用列表中的max()/ min()获取返回的max或min项的索引

    Nico Schlöme.. 14 我也对此感兴趣,并使用perfplot(我的宠物项目)比较了一些建议的解决方案. numpy.argmin(x) 对于足够大的列表来说,这是最快的方法,即使从输入l ...

  9. python调用usb设备_在Python中查询连接的USB设备信息的简单方法?

    我能想到像这样的快速代码. 由于所有USB端口都可以通过/ dev / bus / usb / / 对于生成的ID,即使您拔下设备并重新连接它[可能是其他端口].它会是一样的. import re i ...

最新文章

  1. ELF文件格式与进程地址空间的联系
  2. 线程Thread,Runnable
  3. 课时 29:安全容器技术(王旭)
  4. 谋定菲律宾农业全产业链建设 对话国际农民丰收节贸易会
  5. windows拾取像素坐标_窗口坐标获取 windows
  6. 请解释Spring Bean 的自动装配?
  7. linux下安装jdk,非常简单的操作
  8. php循环输出标题,php-如何通过循环在同一标题下分组数据
  9. Idea利用maven打包spring boot项目
  10. cdev_alloc和cdev_init
  11. “华为杯”第十七届中国研究生数学建模竞赛2020 —— B题
  12. 中心药库管理系统 杀毒软件
  13. 庄子:谁知南华秋水意?
  14. windows批量修改文件后缀名
  15. Android 获取无线蓝牙MAC信息代码
  16. 人工雨量计_自动站与人工站遥测雨量计降水量对比分析
  17. Nature | 基于细菌构建具有类真核细胞结构和功能的人工细胞
  18. 知乎上看到一篇有关三门问题比较好的讲解
  19. VTK笔记-切面重建-使用交互器更新断层图的奇异现象的问题排查
  20. mysql error 1142

热门文章

  1. 化学博士6次投毒同事,只因对方给自己安排工作太多....
  2. KDD 2021多个奖项出炉:斯坦福博士摘得学位论文奖,北航校友胡侠获新星奖
  3. Transformer 又立功了!又快(420 fps)又好的车道线检测算法
  4. 又一位!26岁当上985博导,读博期间也曾两次想要退学......
  5. Python 最强编辑器详细使用指南!
  6. 手把手教你研发自己的智能无人机 谢谢您呀!
  7. PS2019历史记录画笔工具、历史记录艺术画笔工具
  8. 美多商城之购物车(展示商品页面简单购物车)
  9. ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`meiduo`.`
  10. Linux之软件安装 apt-get