Numpy.frompyfunc()將計算單個值的函式轉化為計算陣列中每個元素的函式
阿新 • • 發佈:2020-11-22
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
可以看出,程式碼方便了很多,但速度提高不明顯,接下來會探究如何提高速度
歡迎關注公眾號,獲取更多精彩內容。公眾號將不定期更新精品技術部落格、學習心得