Aunque las bibliotecas como NumPy pueden realizar funciones de procesamiento de arrays de alto rendimiento para operar en arrays. Pero Cython también puede funcionar muy bien. Pero cómo ?
Código # 1: Función Cython para recortar los valores en una array 1D simple de dobles
# work.pyx (Cython file) cimport cython @cython.boundscheck(False) @cython.wraparound(False) cpdef clip(double[:] a, double min, double max, double[:] out): ''' Clip the values in a to be between min and max. Result in out ''' if min > max: raise ValueError("min must be <= max") if a.shape[0] != out.shape[0]: raise ValueError("input and output arrays must be the same size") for i in range(a.shape[0]): if a[i] < min: out[i] = min elif a[i] > max: out[i] = max else: out[i] = a[i]
work.py
Se requiere un archivo para compilar y crear la extensión.
Código #2:
# importing libraries from distutils.core import setup from distutils.extension import Extension from Cython.Distutils import build_ext ext_modules = [Extension( 'sample', ['sample.pyx'])] setup(name = 'Sample app', cmdclass = {'build_ext': build_ext}, ext_modules = ext_modules)
Después de realizar la tarea anterior, ahora podemos verificar el funcionamiento de las arrays de clips de función resultantes, con muchos tipos diferentes de objetos de array.
Código #3: Funcionamiento de la array de recorte.
# array module example import work import array import numpy arr = array.array('d', [1, -3, 4, 7, 2, 0]) print ("Array : ", arr) # Clipping the array work.clip(arr, 1, 4, arr) print ("\nClipping array : ", arr) # numpy example arr2 = numpy.random.uniform(-10, 10, size = 1000000) print ("\narr2 : \n", arr2) arr3 = numpy.zeros_like(arr2) print ("\narr3 : \n", arr3) work.clip(arr2, -5, 5, arr3) print ("\nClipping arr3 : \n", ar3) print ("\nMinimum in arr3 : ", min(arr3)) print ("\nMaximum in arr3 : ", min(arr3))
Producción :
Array : array('d', [1.0, -3.0, 4.0, 7.0, 2.0, 0.0]) Clipping array : array('d', [1.0, 1.0, 4.0, 4.0, 2.0, 1.0]) arr2 : [-9.55546017, 7.45599334, 0.69248932, ..., 0.69583148, -3.86290931, 2.37266888] arr3 : array([ 0., 0., 0., ..., 0., 0., 0.]) Clipping arr3 : [-5., 5., 0.69248932, ..., 0.69583148, -3.86290931, 2.37266888] Minimum in arr3 : 5.0 Maximum in arr3 : 5.0
Publicación traducida automáticamente
Artículo escrito por manikachandna97 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA