欢迎来到Introzo百科
Introzo百科
当前位置:网站首页 > 技术 > Numpy.frompyfunc() 将计算单个值的函数转换为计算数组中每个元素的函数

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

日期:2023-10-05 15:37

-->

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

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

这是示例代码:

# -*- 编码:utf-8 -*-
”“”
创建于 2020 年 11 月 20 日星期五 17:18:11 @作者:潘
”“”
导入时间
将 numpy 导入为 np arr = np.random.randint(30000, 大小=(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)
返回 #循环法
结果 = np.zeros((1000,600))
t1 = 时间.time()
对于范围(1000)内的 i:
对于范围 (600) 内的 j:
tep = calc(arr[i][j])
结果[i][j] = tep
print('LOOP 使用时间: {} 秒'.format(time.time()-t1)) # 使用 frompyfunc() 将计算单个值的函数转换为计算数组中每个元素的函数
# frompyfunc(func, nin, nout)
# func 为要转换的函数 nin 为输入参数个数 noout 为返回值个数
calc_ufunc = np.frompyfunc(calc, 1, 1)
t2 = 时间.time()
img1 = calc_ufunc(arr).astype(np.float)
print('frompyfunc 使用时间: {} 秒'.format(time.time()-t2)) print('计算数据已完成')

输出:

LOOP 使用时间:20.85917043685913 秒
frompyfunc 使用时间:12.103625059127808 秒

可以看到代码方便了很多,但是速度提升并不明显。接下来我们就探讨一下如何提高速度

欢迎关注公众号了解更多精彩内容。 公众号优质技术博客和学习心得不定期更新

-->

关灯