Monday, October 6, 2025
HomeLanguagesHigh-Performance Array Operations with Cython | Set 1

High-Performance Array Operations with Cython | Set 1

Although libraries like NumPy can perform high-performance array processing functions to operate on arrays. But Cython can also work really well. But how ?

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)


 
After performing the task above, now we can check the working of resulting function clips arrays, with many different kinds of array objects.

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 ("\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))


Output :

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
Dominic
Dominichttp://wardslaus.com
infosec,malicious & dos attacks generator, boot rom exploit philanthropist , wild hacker , game developer,
RELATED ARTICLES

Most Popular

Dominic
32338 POSTS0 COMMENTS
Milvus
86 POSTS0 COMMENTS
Nango Kala
6707 POSTS0 COMMENTS
Nicole Veronica
11871 POSTS0 COMMENTS
Nokonwaba Nkukhwana
11936 POSTS0 COMMENTS
Shaida Kate Naidoo
6825 POSTS0 COMMENTS
Ted Musemwa
7089 POSTS0 COMMENTS
Thapelo Manthata
6779 POSTS0 COMMENTS
Umr Jansen
6779 POSTS0 COMMENTS