S'il faut choisir entre numba et pythran, je pense que le choix pour moi se fera sur le support du sous ensemble de numpy.
Celui de numba est extrêmement faible, ce qui rend le port de code que l'on a voulu par trop lent (donc on utilise plein d'outils numpy) extrêmement chiant.
Je ne trouve pas une page explicite qui liste les fonction numpy supportées, c'est dommage !
Par exemple serait il possible de compiler ce bout de code ?
importnumpyasnpdefget(img,y0,y1,x0,x1,mode="reflect"):xs,ys=np.mgrid[y0:y1,x0:x1]height,width=img.shapeifmode=="nearest":xs=np.clip(xs,0,height-1)ys=np.clip(ys,0,width-1)elifmode=="wrap":xs=xs%heightys=ys%widthelifmode=="reflect":maxh=height-1maxw=width-1# An unobvious way of performing reflecting modulo# You should comment thisxs=np.absolute((xs+maxh)%(2*maxh)-maxh)ys=np.absolute((ys+maxw)%(2*maxw)-maxw)elifmode=="constant":output=np.empty((y1-y0,x1-x0))output.fill(0)# WHAT THE CONSTANT IS# LOADS of bounds checks and restrictions# You should comment thistarget_section=output[max(0,-y0):min(y1-y0,-y0+height),max(0,-x0):min(x1-x0,-x0+width)]new_fill=img[max(0,y0):min(height,y1),max(0,x0):min(width,x1)]# Crop both the sections, so that they're both the size of the smallest# Use more lines; I'm too lazy right nowtarget_section[:new_fill.shape[0],:new_fill.shape[1]]=new_fill[:target_section.shape[0],:target_section.shape[1]]returnoutputelse:raiseNotImplementedError("Unknown mode")returnimg[xs,ys]
En soit, je ne suis pas sur de gagner en perf, mais comme j'appelle ce code dans plein de filtres, je ne peux pas utiliser numba par exemple si je fais appel à cette fonction.
Personnellement mon intérêt réside dans ne pas avoir à vectoriser des boucles avec plein de conditions sur les indices d'un tableau ...
La c'est la version 2D pour jouer mais ne 3D, ce n'est même pas la peine.
Et si je le fais en cython, alors j'ai perdu tout le monde ... et je dois tout gérer !
Donc une solution ou je serais directement capable en lisant une page de choisir de réduire mes appels au sous ensemble supporté serait cool. C'est juste que sans la page du support, c'est assez difficile.
Après, c'est peut être mois que n'ai juste pas cherché où il faut, cela ne serait pas la première fois ...
# Liste des fonctions de numpy supportées
Posté par freejeff . En réponse au journal Pythran, en plein délire. Évalué à 4.
S'il faut choisir entre numba et pythran, je pense que le choix pour moi se fera sur le support du sous ensemble de numpy.
Celui de numba est extrêmement faible, ce qui rend le port de code que l'on a voulu par trop lent (donc on utilise plein d'outils numpy) extrêmement chiant.
Je ne trouve pas une page explicite qui liste les fonction numpy supportées, c'est dommage !
Par exemple serait il possible de compiler ce bout de code ?
En soit, je ne suis pas sur de gagner en perf, mais comme j'appelle ce code dans plein de filtres, je ne peux pas utiliser numba par exemple si je fais appel à cette fonction.
Personnellement mon intérêt réside dans ne pas avoir à vectoriser des boucles avec plein de conditions sur les indices d'un tableau ...
La c'est la version 2D pour jouer mais ne 3D, ce n'est même pas la peine.
Et si je le fais en cython, alors j'ai perdu tout le monde ... et je dois tout gérer !
Donc une solution ou je serais directement capable en lisant une page de choisir de réduire mes appels au sous ensemble supporté serait cool. C'est juste que sans la page du support, c'est assez difficile.
Après, c'est peut être mois que n'ai juste pas cherché où il faut, cela ne serait pas la première fois ...