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

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

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

原文地址:https://www.cnblogs.com/yhpan/p/14020146.html