Высокопроизводительные операции с массивами с помощью Cython | Комплект 1
Хотя библиотеки, такие как NumPy, могут выполнять высокопроизводительные функции обработки массивов для работы с массивами. Но Cython также может работать очень хорошо. Но как ?
Code #1 : Cython function for clipping the values in a simple 1D array of doubles
# 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
file is required to compile and build the extension.
Code #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) |
После выполнения вышеуказанной задачи теперь мы можем проверить работу результирующих массивов клипов функций с множеством различных типов объектов массивов.
Code #3 : Working of Clipping Array.
# 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 ( "
Clipping array : " , arr) # numpy example arr2 = numpy.random.uniform( - 10 , 10 , size = 1000000 ) print ( "
arr2 :
" , arr2) arr3 = numpy.zeros_like(arr2) print ( "
arr3 :
" , arr3) work.clip(arr2, - 5 , 5 , arr3) print ( "
Clipping arr3 :
" , ar3) print ( "
Minimum in arr3 : " , min (arr3)) print ( "
Maximum in arr3 : " , min (arr3)) |
Выход :
Массив: array ('d', [1.0, -3.0, 4.0, 7.0, 2.0, 0.0]) Массив отсечения: 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.]) Обрезка arr3: [-5., 5., 0,69248932, ..., 0,69583148, -3,86290931, 2,37266888] Минимум в arr3: 5.0 Максимум в arr3: 5.0
Внимание компьютерщик! Укрепите свои основы с помощью базового курса программирования Python и изучите основы.
Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.