Recherche…


Utilisation des fonctions d'une bibliothèque C personnalisée

Nous avons une bibliothèque C nommée my_random qui produit des nombres aléatoires à partir d'une distribution personnalisée. Il fournit deux fonctions que nous voulons utiliser: set_seed(long seed) et rand() (et bien d’autres dont nous n’avons pas besoin). Pour les utiliser en Cython, nous devons

  1. définir une interface dans le fichier .pxd et
  2. appelez la fonction dans le fichier .pyx.

Code

test_extern.pxd

# extern blocks define interfaces for Cython to C code
cdef extern from "my_random.h":
    double rand()
    void c_set_seed "set_seed" (long seed) # rename C version of set_seed to c_set_seed to avoid naming conflict

test_extern.pyx

def set_seed (long seed):
    """Pass the seed on to the c version of set_seed in my_random."""
    c_set_seed(seed)

cpdef get_successes (int x, double threshold):
    """Create a list with x results of rand <= threshold
    
    Use the custom rand function from my_random.
    """
    cdef:
        list successes = []
        int i
    for i in range(x):
        if rand() <= threshold:
            successes.append(True)
        else:
            successes.append(False)
    return successes


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow