• 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
    

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

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

  • 相关阅读:
    Linux练习题
    我们普通大学生和国内一流大学的学生差距到底在哪里?
    Python修复图像文件后缀名
    Linux查找/扫描局域网打印机IP
    修改分区后的 Grub rescue
    Linux Matlab mex gcc 版本
    UFLDL新版教程
    Linux之时间、地点、人物、事件、情节
    GMchess Linux下的中国象棋游戏
    Linux 终端 忽略大小写
  • 原文地址:https://www.cnblogs.com/yhpan/p/14020146.html
Copyright © 2020-2023  润新知