多进程、多线程、并行的调用方式的不同以及python各种常用且优化较好的并行的处理方法,回头要总结一下,概念模糊很蒙蔽。我们这里介绍一下numba强大并且简单易用的并行功能。

import numpy
from numba import njit
def do_trig(x, y):z = numpy.empty_like(x)for i in range(x.shape[0]):for j in range(x.shape[1]):z[i, j] = numpy.sin(x[i, j]**2) + numpy.cos(y[i, j])return zx = numpy.random.random((1000, 1000))
y = numpy.random.random((1000, 1000))%timeit do_trig(x, y)

下面我们jit一下

@njit
def do_trig(x, y):z = numpy.empty_like(x)for i in range(x.shape[0]):for j in range(x.shape[1]):z[i, j] = numpy.sin(x[i, j]**2) + numpy.cos(y[i, j])return z

very nice,改变编译的方式特别是在这种大量循环的情况下能提升非常多速度呢。

接下来我们使用numba中的并行功能来并行化循环。

import numba
from numba import njit,prange
numba.config.NUMBA_DEFAULT_NUM_THREADS=4
@njit(parallel=True)
def do_trig(x, y):z = numpy.empty_like(x)for i in prange(x.shape[0]):for j in prange(x.shape[1]):z[i, j] = numpy.sin(x[i, j]**2) + numpy.cos(y[i, j])return z%timeit do_trig(x, y)

需要注意的是,numba并行的时候使用的线程数通过numba的环境变量来设置,应该针对不同的任务设置大小,并不是越大越好因为调用多个线程也是存在开销的,另外原来的range循环要用numba特有的prange替换,这样numba才能识别循环并且进行相应的并行化。


我们前面提到的vectorize并行化就更简单了。。。可以把直接把矩阵运算进行并行。。。见下:

@vectorize
def do_trig_vec(x, y):z = math.sin(x**2) + math.cos(y)return z%timeit do_trig_vec(x, y)

@vectorize('float64(float64, float64)', target='parallel')
def do_trig_vec_par(x, y):z = math.sin(x**2) + math.cos(y)return z%timeit do_trig_vec_par(x, y)

numba在vectorize修饰函数的情况下,可以直接对矩阵运算进行并行,牛逼,太方便了哈哈哈哈哈哈哈哈,而且用起来真是太简单了。

sqlserver循环like变量_numba从入门到精通(6)—numba与循环与并行相关推荐

  1. python编程循环语句_循环语句—Python编程从入门到精通(5)

    第6章.循环语句 在本书上一章的内容中,我们学习了实现条件判断功能的条件语句,让程序的执行顺序发生了变化.为了满足循环和跳转等功能,本章将详细讲解Python语言中循环语句的知识,主要包括for循环语 ...

  2. 为什么c++文件只能执行一次_numba从入门到精通(1)—为什么numba能够加速

    真是哭了...为什么我之前写的numba教程全没了啊啊啊啊啊啊!!!!????? 只能从头整理了无语. How Numba and Cython speed up Python code​rushte ...

  3. python numba教程_numba从入门到精通(1)—为什么numba能够加速

    真是哭了...为什么我之前写的numba教程全没了啊啊啊啊啊啊!!!!????? 只能从头整理了无语.How Numba and Cython speed up Python code​rushter ...

  4. 2020-10-21CUDA从入门到精通

    CUDA从入门到精通(零):写在前面 在老板的要求下,本博主从2012年上高性能计算课程开始接触CUDA编程,随后将该技术应用到了实际项目中,使处理程序加速超过1K,可见基于图形显示器的并行计算对于追 ...

  5. CUDA从入门到精通

    http://blog.csdn.net/augusdi/article/details/12833235 CUDA从入门到精通(零):写在前面 在老板的要求下,本博主从2012年上高性能计算课程开始 ...

  6. CANoe 从入门到精通

    目录 前言 初级篇 实践篇 前言 本专栏主要分为二个部分: 第一部分是初级篇,主要介绍CANoe中常用的模块: 第二部分是实践篇,主要是带领大家一起做一个项目,此项目是BootLoader刷写的上位机 ...

  7. C语言 while 循环 - C语言零基础入门教程

    目录 一.while 循环简介 1.while 循环语法 2.while 使用 二.while 循环中使用 break 三.while 循环中使用 continue 四.猜你喜欢 零基础 C/C++ ...

  8. Java入门之顺序、选择、循环结构

    Java入门之顺序.选择.循环结构 顺序结构: package com.LynnStudy.scanner; import java.util.Scanner; /*** @Author hql* @ ...

  9. oracle sql循环判断语句怎么写,Oracle 非常详细的 PL/SQL入门教程,PL/SQL语法格式/循环语句/条件判断/异常处理...

    PL/SQL入门教程目录 Oracle PL/SQL入门教程,PL/SQL语法格式/循环语句/条件判断/异常处理 一.PL/SQL简介 1.PL/SQL简介 1.PL/SQl是过程语言PL与结构化语言 ...

最新文章

  1. 站在巨人的肩膀上“思考”问题,重在思考而不是拿来主义
  2. 惊了,老板要我开发一个工作流引擎!
  3. 据说腾讯的算法高手都是C++背景
  4. 记录一次阿里云服务器升级报错
  5. (五)开源IT资产管理系统--分发OCS客户端
  6. ajax 延迟显示加载中提示
  7. python注册登录系统_Python实现简单用户注册信息管理系统
  8. printf不明确_资源贴|不是吧,还有人不知道指针?你想知道还不点进来看看?...
  9. linux 装nano命令,linux下安装 nano 如果没有这个命令的话~~可以看下
  10. 【HDU - 1452】 Happy 2004(因子和,逆元,快速幂)
  11. 并行计算的一些思考与总结
  12. Django--工程搭建
  13. iOS自定义SearchBar样式
  14. JMX Java Management Extensions
  15. BAT专家详解勒索病毒冲击波:勒索物联网时代的开端
  16. 苹果蓝牙耳机怎么接电话_拆解报告:高仿苹果AirPods真无线蓝牙耳机
  17. Excel复制单元格样式
  18. Vagrant-文件夹共享
  19. 常用财务指标计算公式(信贷指标公式)
  20. nodejs多房间web聊天室

热门文章

  1. python创建提示用户输入查询条件_pythone-2:用户登录并根据条件查询
  2. 集群系统 刀片服务器,刀片服务器集群原理
  3. C语言课程学籍管理课程书面报告,C语言学籍管理系统课程设计报告书
  4. oracle导出一个表数据库,excel怎么导出多个表格数据库数据-一个excel表格中有多个sheet,如何将其导入oracle数......
  5. excel有必要用python_为什么Python比VBA更适合自动化处理Excel数据?
  6. git命令之git mergetool vi非正常退出.swp删除不了的问题
  7. [译]C语言实现一个简易的Hash table(3)
  8. Eclipse快捷键大全,导包快捷键:ctrl+Shift+/【转】
  9. ios新手开发——toast提示和旋转图片加载框
  10. 深入解析thinkphp中的addAll方法