Python作为动态语言其功能虽然强大,但是在数值计算方面有一个最大的缺点:速度不够快。在Python级别的循环和计算的速度只有C语言程序的百分之一。因此才有了NumPy, SciPy这样的函数库,将高度优化的C、Fortran的函数库进行包装(封装),以供Python程序调用。如果这些高度优化的函数库无法实现我们的算法,必须从头开始写循环、计算的话,那么用Python来做显然是不合适的。因此SciPy提供了快速调用C++语言程序的方法– Weave。下面是对NumPy的数组求和的例子:

import scipy.weave as weave
import numpy as np
import timedef my_sum(a):n=len(a) code="""int i;double counter;counter =0;for(i=0;i<n;i++){counter=counter+a(i);}return_val=counter;"""err=weave.inline(code,['a','n'],type_converters=weave.converters.blitz,compiler="gcc")return erra = np.arange(0, 10000000, 1.0)
# 先调用一次my_sum,weave会自动对C语言进行编译,此后直接运行编译之后的代码
my_sum(a)start = time.clock()
for i in xrange(100):my_sum(a)  # 直接运行编译之后的代码
print "my_sum:", (time.clock() - start) / 100.0start = time.clock()
for i in xrange(100):np.sum( a ) # numpy中的sum,其实现也是C语言级别
print "np.sum:", (time.clock() - start) / 100.0start = time.clock()
print sum(a) # Python内部函数sum通过数组a的迭代接口访问其每个元素,因此速度很慢
print "sum:", time.clock() - start
my_sum: 0.0294527349146
np.sum: 0.0527649547638
sum: 9.11022322669

注意:以上是一个老版本的scipy.weave的用法,如果使用最新版本的scipy的,将会提示如下错误:

ImportError: No module named 'scipy.weave'

查阅文档,我们发现:
The scipy.weave module is deprecated. It was the only module never ported to Python 3.x, and is not recommended to be used for new code - use Cython instead. In order to support existing code, scipy.weave has been packaged separately: https://github.com/scipy/weave. It is a pure Python package, and can easily be installed with pip install weave.

References

[1] 用Weave嵌入C语言

用 scipy.weave 嵌入 C 语言相关推荐

  1. python科学计算——用Weave嵌入C语言

    最近因为项目需求,需要用到C++/Python混合编程,今天无意间发现了scipy的一个远古模块weave也可以在python中嵌入C语言的库,就鼓捣了一下(我真闲o(╥﹏╥)o) 先提醒一下大家,在 ...

  2. 写入接口c语言_PYNQ: 使用CFFI嵌入C语言

    未经私信同意禁止转载! 前言 CFFI是连接Python与c的桥梁,可实现在Python中调用c文件.CFFI为c语言的外部接口,在Python中使用该接口可以实现在Python中使用外部c文件的数据 ...

  3. 易语言和python混合编程_Python脚本可以嵌入易语言程序吗 |

    易语言和python比哪个更好更容易 虽然我很支产,但我不说,易语言一无是处,它甚至不能称为一言,顶多算个IDE.python是一门脚本语言,功能还不错,但目前还不能编写手机软件.编程中出现乱码是非常 ...

  4. java代码中如何嵌入c语言,Android中Java代码与C的互相调用(JNI的简单使用)

    引言 最近在做项目的时候,接触到JNI,想一想自己第一次接触这个东西的时候,还是好久之前,现在既然接触到了,那我就简单的跟大家讲一讲JNI的基本使用方法. JNI(Java Native Interf ...

  5. python的科学计算库有哪些_《用Python进行科学计算》——SciPy数值计算库

    SciPy函数库在NumPy库的基础上增加了众多的数学.科学以及工程计算中常用的库函数.例如线性代数.常微分方程数值求解.信号处理.图像处理.稀疏矩阵等. 最小二乘拟合 假设有一组实验数据(x[i], ...

  6. 《用Python进行科学计算》——SciPy数值计算库

    SciPy函数库在NumPy库的基础上增加了众多的数学.科学以及工程计算中常用的库函数.例如线性代数.常微分方程数值求解.信号处理.图像处理.稀疏矩阵等. 最小二乘拟合 假设有一组实验数据(x[i], ...

  7. SciPy--数值计算

    希望本人也访问原始链接. 原文链接:http://sebug.net/paper/books/scipydoc/scipy_intro.html 3 SciPy-数值计算库¶ SciPy函数库在Num ...

  8. python科学计算基础教程pdf下载-用Python做科学计算 高清晰PDF

    用Python做科学计算一书介绍如何用Python开发科学计算的应用程序,除了介绍数值计算之外,我们还将着重介绍如何制作交互式的2D.3D图像:如何设计精巧的程序界面:如何和C语言所编写的高速计算程序 ...

  9. python科学计算基础教程pdf下载-用Python做科学计算 pdf版

    本书将介绍如何用Python开发科学计算的应用程序,除了介绍数值计算之外,我们还将着重介绍如何制作交互式的2D.3D图像:如何设计精巧的程序界面:如何和C语言所编写的高速计算程序结合:如何编写声音.图 ...

最新文章

  1. 巧用Excel 2010数据透视表制作销售报表
  2. 10次机会 js 猜数_题目:(由计算机产生一个1~100的随机数,然后键入猜想数,最多猜10次跳出)请问大神们这个代码哪错了?...
  3. HTML(六)------ CSS
  4. C# 读取网页源码的三种办法WebClient、WebRequest、HttpWebRequest
  5. 容器大小_无根容器内部结构浅析
  6. 二、bootstrap4基础(flex布局)
  7. java 反射 类名_java – 从反射中获取字段的类名
  8. java基础—统计一个字符串中各个字符出现的次数
  9. Entity Framework 6 Recipes 2nd Edition(11-5)译 - 从”模型定义”函数返回一个匿名类型...
  10. Java8 Stream流式编程,极大解放你的生产力!
  11. Windows 共享无线上网 无法启动ICS服务 解决方法
  12. 从xls或者txt等格式的文件中读取编码码率以及PSNR
  13. java 文件下载预览_javaweb简单的实现文件下载及预览
  14. 服务应用突然宕机了?别怕,Dubbo 帮你自动搞定服务隔离!
  15. linux 网络编程与 windows 网络编程
  16. C#制作简易屏幕保护
  17. 工业线阵相机与面阵相机特点分析
  18. dnspod.cn 动态域名客户端
  19. java操作Excel、PDF文件
  20. 【黑客故事】钢铁侠Musk的音影记录

热门文章

  1. MySQL 的DDL DML DQL DCL细节解析 知道这些就够了
  2. java oop试题_java oop 试题
  3. 探索软件模式设计(一)
  4. BUAAOO——UNIT2 SUMMARY
  5. 当浏览器窗口大小改变时,设置显示内容的高度
  6. POJ 1185 炮兵阵地(状压dp)
  7. 高精度计时器 -- C++/Windows版
  8. 自创本派高考理数试题集现在发布
  9. Hibernate继承映射
  10. 一步一步 ITextSharp Anchor Image Chapter Section使用