zoukankan      html  css  js  c++  java
  • Numpy.frompyfunc()将计算单个值的函数转化为计算数组中每个元素的函数

    Numpy.frompyfunc()将计算单个值的函数转化为计算数组中每个元素的函数

    不再通过遍历,对数组中的元素进行运算,利用frompyfunc()将计算单个值的函数转化为计算数组中每个元素的函数

    下面是示例代码:

    # -*- coding: utf-8 -*-
    """
    Created on Fri Nov 20 17:18:11 2020
    
    @author: pan
    """
    import time
    import numpy as np
    
    arr = np.random.randint(30000, size=(1000, 600), dtype='int16')
    
    def calc(arr):
        condlist = [arr<5000,5000<=arr<10000,15000<=arr<20000,20000<=arr<25000,arr>=25000]
        funclist = [lambda arr:arr*0.55,lambda arr:arr*0.81,lambda arr:arr*0.972,lambda arr:arr*1.067,lambda arr:arr*1.5]
        out = np.piecewise(arr, condlist, funclist)
        return out
    
    # 循环方法
    result = np.zeros((1000,600))
    t1 = time.time()
    for i in range(1000):
        for j in range(600):
            tep = calc(arr[i][j])
            result[i][j] = tep
    print('LOOP Time used: {} sec'.format(time.time()-t1))
    
    # 使用frompyfunc()将计算单个值的函数转化为计算数组中每个元素的函数
    # frompyfunc(func, nin, nout)
    # func  是要进行转化的函数  nin是输入参数的个数  nout是返回值的个数
    calc_ufunc = np.frompyfunc(calc, 1, 1)
    t2 = time.time()
    img1 = calc_ufunc(arr).astype(np.float)
    print('frompyfunc Time used: {} sec'.format(time.time()-t2))
    
    print('calc data has done')
    

    输出:

    LOOP Time used: 20.85917043685913 sec
    frompyfunc Time used: 12.103625059127808 sec
    

    可以看出,代码方便了很多,但速度提高不明显,接下来会探究如何提高速度

    欢迎关注公众号,获取更多精彩内容。公众号将不定期更新精品技术博客、学习心得
    公众号

  • 相关阅读:
    推荐一本书 改善你的视力:跟眼镜说再见
    Gentoo中gcc4.1.2到gcc4.3.2的升级
    msbuild学习的一些相关链接
    SqlServer 2005安装问题
    Gentoo linux中安装php5运行环境
    sql 时间函数(全)
    asp.net中的对话框
    win7 资源管理器指向我的电脑
    C/C++ 位操作 总结
    【转】Java字节序转换
  • 原文地址:https://www.cnblogs.com/yhpan/p/14020146.html
Copyright © 2011-2022 走看看