python grid函数_Python – matplotlib griddata的多处理器

2023-11-04

我在Python 3.4.2中运行了示例代码,具有numpy版本1.9.1和matplotlib版本1.4.2,在具有4个物理CPU的Macbook Pro上(即,与“虚拟”CPU相反,Mac硬件架构也是提供一些用例):

import numpy as np

import matplotlib.mlab as mlab

import time

import multiprocessing

# This value should be set much larger than nprocs, defined later below

size = 500

Y = np.arange(size)

X = np.arange(size)

x, y = np.meshgrid(X, Y)

u = x * np.sin(5) + y * np.cos(5)

v = x * np.cos(5) + y * np.sin(5)

test = x + y

tic = time.clock()

test_d = mlab.griddata(

x.flatten(), y.flatten(), test.flatten(), x+u, y+v, interp='linear')

toc = time.clock()

print('Single Processor Time={0}'.format(toc-tic))

# Put interpolation points into a single array so that we can slice it easily

xi = x + u

yi = y + v

# My example test machine has 4 physical CPUs

nprocs = 4

jump = int(size/nprocs)

# Enclose the griddata function in a wrapper which will communicate its

# output result back to the calling process via a Queue

def wrapper(x, y, z, xi, yi, q):

test_w = mlab.griddata(x, y, z, xi, yi, interp='linear')

q.put(test_w)

# Measure the elapsed time for multiprocessing separately

ticm = time.clock()

queue, process = [], []

for n in range(nprocs):

queue.append(multiprocessing.Queue())

# Handle the possibility that size is not evenly divisible by nprocs

if n == (nprocs-1):

finalidx = size

else:

finalidx = (n + 1) * jump

# Define the arguments, dividing the interpolation variables into

# nprocs roughly evenly sized slices

argtuple = (x.flatten(), y.flatten(), test.flatten(),

xi[:,(n*jump):finalidx], yi[:,(n*jump):finalidx], queue[-1])

# Create the processes, and launch them

process.append(multiprocessing.Process(target=wrapper, args=argtuple))

process[-1].start()

# Initialize an array to hold the return value, and make sure that it is

# null-valued but of the appropriate size

test_m = np.asarray([[] for s in range(size)])

# Read the individual results back from the queues and concatenate them

# into the return array

for q, p in zip(queue, process):

test_m = np.concatenate((test_m, q.get()), axis=1)

p.join()

tocm = time.clock()

print('Multiprocessing Time={0}'.format(tocm-ticm))

# Check that the result of both methods is actually the same; should raise

# an AssertionError exception if assertion is not True

assert np.all(test_d == test_m)

我得到以下结果:

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/matplotlib/tri/triangulation.py:110: FutureWarning: comparison to `None` will result in an elementwise object comparison in the future.self._neighbors)

Single Processor Time=8.495998

Multiprocessing Time=2.249938

我不太确定什么是导致triangulation.py的“未来警告”(显然我的版本的matplotlib不喜欢最初提供的问题的输入值),但不管多处理确实似乎达到所需的加速度为8.50 / 2.25 = 3.8,(编辑:请参阅注释),大约在4X左右,我们期望具有4个CPU的机器。而最后的断言声明也成功执行,证明这两种方法得到相同的答案,所以尽管有一些微小的警告信息,我相信上面的代码是一个有效的解决方案。

编辑:一位评论家指出,我的解决方案以及原作者发布的代码片段都可能使用错误的方法time.clock()来衡量执行时间;他建议使用time.time()。我想我也来到他的观点。 (进一步挖掘Python文档,我仍然不相信,即使这个解决方案是100%正确的,因为较新版本的Python似乎已经不推荐使用time.clock(),有利于time.perf_counter()和time.process_time().但无论如何,我同意,time.time()绝对是采用这种测量的最正确方法,它仍然可能比我之前使用过的更为正确,time.clock())。

假设评论者的观点是正确的,那意味着我以为我测量的大约4X的加速度其实是错误的。

然而,这并不意味着底层代码本身没有被正确地并行化;相反,这只是意味着并行化在这种情况下并没有实际的帮助;分割数据并在多个处理器上运行并没有改善任何事情。为什么会这样?其他用户有pointed out,至少在numpy / scipy中,一些功能在多个核心上运行,有些不会,最终用户可能是一个严重挑战性的研究项目,试图找出哪些功能是哪一个。

根据这个实验的结果,如果我的解决方案正确地实现了Python内的并行化,但是没有进一步加速,那么我建议最简单的解释是,matplotlib也可能是并行化其“引擎盖”下的一些功能,所以在编译的C库中,就像numpy / scipy已经做的那样。假设是这种情况,那么这个问题的正确答案就是没有什么可以做的:如果基础C库已经在多个内核上静默运行,Python将进一步并行化将不会很好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python grid函数_Python – matplotlib griddata的多处理器 的相关文章

  • 微信小程序存在的风险_浅谈微信小程序会中病毒事件

    小程序其实是云端数据 不在软件里 所以小程序没有进入的端口 所以华为的管家也检测不出来 但是你按照腾讯的方法收索的话 就等于默认开通小程序 把你的数据放到云端 同时你拥有的账号就绑定了一大堆应用程序 这些程序你永远也别想删除掉 除非不用那个
  • C语言学习(四)——字符串处理函数

    字符串处理函数 17个 1 gets include
  • Jmeter(十五) - 从入门到精通 - JMeter导入自定义的Jar包(详解教程)

    1 简介 原计划这一篇是介绍前置处理器的基础知识的 结果由于许多小伙伴或者童鞋们在微信和博客园的短消息中留言问如何引入自己定义的Jar包呢 我一一回复告诉他们和引入插件的Jar包一样的道理 一通百通 但是感觉他们还是很迷糊很迷惘 因此在这里
  • powerdesigner 创建物理结构视图

    PowerDesigner系列产品提供了一个完整的建模解决方案 业务或系统分析人员 设计人员 数据库管理员DBA和开发人员可以对其裁剪以满足他们的特定的需要 本系列将简单介绍PowerDesigner入门使用操作 若有不足或需要补充之处 欢
  • 深度学习环境配置9——Ubuntu下的tensorflow-gpu==2.4.0环境配置

    深度学习环境配置9 Ubuntu下的tensorflow gpu 2 4 0环境配置 注意事项 一 2022 09 04更新 学习前言 各个版本tensorflow2的配置教程 环境内容 环境配置 一 Anaconda安装 1 Anacon
  • 股票获取最大利润

    1 题目背景 给定一个数组 prices 它的第i个元素prices i 表示一支给定股票第i天的价格 你只能选择某一天买入这只股票 并选择在未来的某一个不同的日子卖出该股票 设计一个算法来计算你所能获取的最大利润 返回你可以从这笔交易中获
  • 操作中 "Chinese_PRC_CI_AS" 和 "Chinese_PRC_CI_AI" 之间的排序规则冲突 的解决办法

    最主要就一句话 在条件中不同排序规则的列后面加上 collate Chinese PRC CI AS 即可解决 有个需求 要求数据库系统自动同步两个不同数据库中的人员信息 首先想到写一个存储过程然后由系统任务来自动处理 尝试性的写了下面的查
  • H5实现高德地图的uni.chooseLocation

    在uniapp中获取当前定位和选择当前位置都是做了兼容 在各个平台都可以使用 这篇文章讲解如何定位当前位置 搜索位置 点击进行定位在H5中实现uni chooseLocation 如下图所示 左侧微信小程序的选择位置 右侧为高德地图在H5中
  • 微信小程序 修改三方组件中的自带样式

    众所周知 微信小程序会引用诸如vant weiui等三方组件 当我们想要对组件自带样式进行修改的时候该怎么做呢 1 在调试器中找到想要修改样式的组件的class类名 在对应的wxss中添加样式 此时样式未生效 2 官方文档中提到可以在ext
  • python写的串口助手并连接腾讯云服务器数据库

    结合上一期的基于pyqt5开发的图书管理系统UI 带登录页面 文章做一个此章节的补充 因为老师说需要结合数据库实现登录系统 于是我就想起了自己在腾讯云上买的一个服务器 因此经过百度查询大量的资料 功夫不负有心人 在这个Pyqt5实现的可视化
  • three.js展示obj模型

    利用three js展示obj模型 环境 必须是在web服务器中 下载objShow js
  • 【UART】Verilog实现UART接收和发送模块

    目录 写在前面 UART 工作原理 UART 接收部分 UART RX 模块图 UART RX 时序图 Verilog 实现 UART RX 模块 UART 发送部分 UART TX 模块图 UART TX 时序图 Verilog 实现 U
  • linux如何同时执行两个命令,如何同时运行两个或者多个终端命令

    选项一 分号 运算符 分号 运算符允许你连续执行多个命令 而不管前面的每个命令是否成功 例如 打开终端窗口 在Ubuntu和Linux Mint中 Ctrl Alt T 然后 在一行中键入以下三个命令 用分号分隔 然后按Enter 这会列出
  • 09、用户、组(一):基本分类

    1 用户类别 管理员 普通用户 系统用户 登录用户 2 用户标识 UserID UID 16bits二进制数字 0 65535 管理员 0 普通用户 1 65635 系统用户 1 499 CentOS6 1 999 CentOS7 登录用户
  • springboot2.0 redis使用lettuce连接包实现分布式锁关键词setnx

    springboot升级到2 0之后 关联的spring data redis默认使用的连接包也从原本的jedis改为了性能更好 且线程安全的使用netty实现的lettuce连接包 鉴于spring data默认只提供了setnx不带过期
  • Unable to negotiate with XXXX port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss

    问题描述 代码仓库已经添加了ssh公钥之后 克隆代码到本地时就报了这个问题 执行命令 git clone git xxxxxxxxxxxxx git 不能正常clone代码 报错信息如下 Unable to negotiate with x
  • JVM 面试深入理解内存模型和垃圾回收(二)

    JVM 面试深入理解内存模型和垃圾回收 二 文章目录 JVM 面试深入理解内存模型和垃圾回收 二 1 运行时数据区域 1 1 The PC Register 1 2 Java Virtual Machine Stacks 1 2 1 Fra
  • MongoDB Replica Sets + Sharding 实战

    一 Replica Sets 复制集 MongoDB 支持在多个机器中通过异步复制达到故障转移和实现冗余 多机器中同一时刻只有一台是用于写操作 正是由于这个情况 为 MongoDB 提供了数据一致性的保障 担当Primary 角色的机器能把
  • image点击事件

    self headImage userInteractionEnabled YES UITapGestureRecognizer singleTap1 UITapGestureRecognizer alloc initWithTarget

随机推荐

  • 实验八 模板

    一 实验目的和要求 1 能够使用C 模板机制定义重载函数 2 能够实例化及使用模板函数 3 能够实例化和使用模板类 4 应用标准C 模板库 STL 通用算法和函数对象实现查找和排序 二 实验内容 1 分析并调试下列程序 了解函数模板的使用
  • GJM : 【技术干货】给The Lab Renderer for Unity中地形添加阴影

    感谢您的阅读 喜欢的 有用的就请大哥大嫂们高抬贵手 推荐一下 吧 你的精神支持是博主强大的写作动力以及转载收藏动力 欢迎转载 版权声明 本文原创发表于 请点击连接前往 未经作者同意必须保留此段声明 如有问题请联系我 侵立删 谢谢 我的博客
  • R4 STM32高级定时器笔记之PWM互补输出

    STM32高级定时器笔记之PWM互补输出 程序功能 通过两个GPIO 输出相反的PWM信号 带死区时间和刹车控制 PWM为50 要配置几个寄存器 CNT计数器 CCR输出比较寄存器器 输入捕获寄存器 ARR自动重装载寄存器 最大65535
  • 数据结构之Trie树

    目录 前言 什么是Trie树 如何实现一棵Trie树 Trie 树与散列表 红黑树的比较 问题 总结 参考资料 前言 搜索引擎的搜索关键词提示功能 我想你应该不陌生吧 为了方便快速输入 当你在搜索引擎的搜索框中 输入要搜索的文字的某一部分的
  • C语言共用体-union的用法

    定义格式 union 共用体名 成员列表 共用体特点 1 占用的内存等于最长的成员占用的内存 2 共用体使用了内存覆盖技术 同一时刻只能保存一个成员的值 如果对新的成员赋值 就会把原来成员的值覆盖掉 会影响其余所有成员 实例说明 typed
  • 二进制流:C++中使用 (char *)& 传递int型值

    文章目录 前言 一 利用二进制流传递整形数组值 1 1 整形数组 1 2 二进制流 1 2 1 那如何将整形数值依次按一个字节存放入二进制流中呢 1 2 2 如何重构回整形数值 二 结构体数组赋值 前言 此前参与罗技G29方向盘远程遥控au
  • 关于运行gitblit.cmd中的@java -cp gitblit.jar;“%CD%\ext\*“ com.gitblit.GitBlitServer --baseFold data报错

    关于运行gitblit cmd中的 java cp gitblit jar CD ext com gitblit GitBlitServer baseFold data报错 问题 关于运行gitblit cmd中的 java cp gitb
  • C#中async/await的线程ID变化情况

    一 简单的起步 Console WriteLine 主线程开始ID Thread CurrentThread ManagedThreadId a await Task Delay 100 c Console WriteLine 主线程结束I
  • 产学合作、协同育人|众享比特董事长严挺连续三年荣获“区块链60人”2022赋能中国区块链创新人物奖

    2022年11月4日 5日 由全国高校人工智能与大数据创新联盟主办的 2022第五届全国高校人工智能大数据区块链教育教学创新论坛 在北京隆重召开 北京众享比特科技有限公司董事长严挺荣获 区块链60人 2022赋能中国区块链创新人物奖 本届论
  • Sober算子边缘检测与Harris角点检测1

    此篇文章主要介绍了Sobel算子的底层运算规律 和cv Harris的相关介绍 测试 import numpy as np mm np array 1 2 3 pow mm 2 array 1 4 9 dtype int32 Harris
  • 大数据不得不说的事儿(一):存算分离凭什么能一统天下

    随着大数据系统建设的深入 企业的数据基础设施面临两个问题 一个是成本问题 随着累积的数据量的增大 大数据业务量的增多 数据存储和处理的成本越来越高 企业数据基础设施的投资越来越大 这部分投资挤占了企业大数据业务创新的空间 另一个是效率问题
  • 安装pycrypto,windows10,全解

    安装pycrypto 一 下载pycrypto源码或pip安装 1 下载pycrypto源码 建意先全部阅读一遍在进行安装 坑太多 不能急 官网 https www dlitz net software pycrypto github ht
  • jquery 实现页面自动加载

    最近组长布置了一项任务 让我们初步了解一下jquery 并用jquery实现页面的自动加载 我在网上找了一些资料实现此功能 现整理如下 首先是要理清思路 下面给一个我从网上找的具体的例子 会帮助大家更好的理解 将前台代码直接拷贝即可执行 这
  • SpringBoot接收前端参数json格式的五种方式(转)

    import java util List import java util Map import org springframework web bind annotation RequestBody import org springf
  • 查看某个端口的连接数情况

    windows指令 查看信息 netstat aon findstr 9200 find ESTABLISHED 查看连接数 netstat aon findstr 9200 find ESTABLISHED c linux 查看信息 ne
  • webpack 学习(一)前端常用的模块化设计模式之commonJs

    前端常用模块化规范 commonJs 规范 AMD ES6 Module规范 commonJs 和AMD 的区别 commonJs加载模块是同步的 也就是说只有加载完成的才会执行后面的操作 由于Node主要用于服务器编程 模块文件一般都存在
  • 深入 AXI4 总线(二)架构

    五个独立通道 AXI4 总线的一大特征是它有 5 个独立的传输通道 这些通道都只支持单向传输 作为类比 SPI 总线有 2 条传输通道 MISO MOSI SPI 输入输出的数据 大路朝天 各走一条 而作为对比 IIC 协议则只有 SDA
  • 类EMD的“信号分解方法”及MATLAB实现(第三篇)——CEEMDAN

    来帮忙填坑了 今天接着之前讲过的EEMD和CEEMD 来介绍一下 类EMD 分解方法的第三篇 1 CEEMDAN 自适应噪声完备集合经验模态分解 的概念 CEEMDAN 1 Complete Ensemble Empirical Mode
  • 框架(Framework)

    框架 Framework 框架 Framework 是整个或部分系统的可重用设计 表现为一组抽象构件及构件实例间交互的方法 另一种定义认为 框架是可被应用开发者定制的应用骨架 前者是从应用方面而后者是从目的方面给出的定义 可以说 一个框架是
  • python grid函数_Python – matplotlib griddata的多处理器

    我在Python 3 4 2中运行了示例代码 具有numpy版本1 9 1和matplotlib版本1 4 2 在具有4个物理CPU的Macbook Pro上 即 与 虚拟 CPU相反 Mac硬件架构也是提供一些用例 import nump