快捷搜索:

您的位置:澳门新葡4473网站 > 新葡亰平台娱乐 > NumPy 1.18.0 发布,Python 科学计算包

NumPy 1.18.0 发布,Python 科学计算包

发布时间:2020-02-07 23:14编辑:新葡亰平台娱乐浏览(189)

    NumPy 1.18.0 已发布。除了通常的错误修复之外,此版本还清理并记录新的随机 C-API,使大量旧版本弃用,并改善了文档的外观。其支持的 Python 版本为 3.5-3.8,这也是最后一个支持 Python 3.5 的 NumPy 发布系列。

    整个快速教程直接上例子,具体对Cython的使用可以看参考文章。以下工作均在Windows 10

    Highlights

    • Python 2.7新葡亰平台娱乐, + NumPy 1.11.0 + Cython 0.24 版本上进行。
    • numpy.random 的 C-API 已经定义并记录。
    • 与 64 位 BLAS 和 LAPACK 库链接的基本基础结构。
    • 许多文档方面的改进。

    准备工作

    假设现在我们用C实现了一个可以用在数组上的cos函数,函数原型如下:

    // 对in_array中的前size个数求cos值,并存放在out_array对应位置上void cos_doubles(double * in_array, double * out_array, int size);
    

    那么总共需要4个文件:

    • cos_doubles.c,C源文件。
    • cos_doubles.h,C头文件。
    • _cos_doubles.pyx,Python的C扩展文件。(注意:之所以前面加个"_"下划线,是因为使用Cython编译打包后会对pyx文件生成同名的c文件,为了避免覆盖掉原来的cos_doubles.c文件,此处加个下划线)
    • setup.py,负责管理编译、打包工作的“配置”脚本。

    下面给出4个文件的源代码

    新功能

    cos_doubles.c

    #include "cos_doubles.h"#include <math.h>/* Compute the cosine of each element in in_array, storing the result in * out_array. */void cos_doubles(double * in_array, double * out_array, int size){ int i; for(i=0;i<size;i++){ out_array[i] = cos(in_array[i]); }}
    
    • 将多元超几何分布添加到 numpy.random

    cos_doubles.h

    #ifndef _COS_DOUBLES_H#define _COS_DOUBLES_Hvoid cos_doubles(double * in_array, double * out_array, int size);#endif
    

    弃用

    _cos_doubles.pyx

    """ Example of wrapping a C function that takes C double arrays as input using the Numpy declarations from Cython """# import both numpy and the Cython declarations for numpyimport numpy as npcimport numpy as np# if you want to use the Numpy-C-API from Cython# (not strictly necessary for this example)np.import_array()# cdefine the signature of our c functioncdef extern from "cos_doubles.h": void cos_doubles (double * in_array, double * out_array, int size)# create the wrapper code, with numpy type annotationsdef cos_doubles_func(np.ndarray[double, ndim=1, mode="c"] in_array not None, np.ndarray[double, ndim=1, mode="c"] out_array not None): cos_doubles(<double*> np.PyArray_DATA, <double*> np.PyArray_DATA(out_array), in_array.shape[0])
    
    • np.fromfile 和 np.fromstring 在错误数据上将出错
    • 在 ma.fill_value中将非标量数组弃用为 fill values

    • 弃用 PyArray_As1DPyArray_As2DPyArray_As1D

    • 弃用 np.alen

    • numpy.ma.mask_cols 和 numpy.ma.mask_row 的axis 参数已弃用

    • ...

    setup.py

    from distutils.core import setup, Extensionimport numpyfrom Cython.Distutils import build_extsetup( cmdclass={'build_ext': build_ext}, ext_modules=[Extension("cos_doubles", sources=["_cos_doubles.pyx", "cos_doubles.c"], include_dirs=[numpy.get_include
    

    更多详细信息可查看发布说明。

    编译打包

    在命令行窗口中进入到上述文件所在同级目录,输入:

    >> python setup.py build_ext -i
    

    参数-i表示inplace,即在同级目录下生成Python可调用模块pyd文件。

    build过程如下:

    新葡亰平台娱乐 1build过程

    然后可以看见在同级目录下多了两个文件:

    • _cos_doubles.c,使用Python C-API自动包装生成的C文件。
    • cos_doubles.pyx,Python可直接调用的module文件,也就是最终我们所需要的东西。

    接下来测试一下:

    # file: test.pyimport cos_doublesimport numpy as npimport matplotlib.pyplot as plta = np.linspace(-5, 5, 100)b = np.empty_likecos_doubles.cos_doubles_funcplt.plotplt.show()
    

    运行效果如下图所示:

    新葡亰平台娱乐 2运行效果

    [1] SciPy lecture notes: 2.8. Interfacing with C[2] Working with NumPy[3] Python中使用C代码:以NumPy为例 [4] Cython学习

    (文/开源中国)    

    本文由澳门新葡4473网站发布于新葡亰平台娱乐,转载请注明出处:NumPy 1.18.0 发布,Python 科学计算包

    关键词: