2017-04-09 1 views

Répondre

2

Cela signifiait probablement "optimisé [par rapport au code Python pur]". Il existe différents types de découpes et la plupart d'entre elles sont déjà très rapides en Python, il n'y a pas grand chose que vous pouvez accélérer. Par exemple, si vous utilisez f[:,w], vous obtiendrez une vue du tableau f. Cela implique un peu de surcharge car une "vue" doit être créée mais elle est déjà très rapide car elle (à l'exclusion de certaines opérations d'indexation avancées) n'est qu'une mémoire.

Toutefois, ce que Cython peut accélérer de manière significative est: l'accès aux éléments individuels d'un tableau. C'est une opération vraiment inefficace dans le code Python parce que l'élément doit être "mis en boîte en tant qu'objet Python" lorsqu'on y accède. Cython peut éviter cette "boxe", quand "exactement ndim nombre d'indices entiers typés" sont utilisés.

Donc ce n'est pas comme f[:,w] n'est pas optimisé. Il est déjà optimisé par numpy. Cython ne peut pas s'améliorer (beaucoup) là-bas. `:` Est `slice (None)`

+0

Je pense que cython continue d'utiliser un appel python/numpy, plutôt que de le remplacer par du code c pur. – hpaulj

+0

Bien que les vues de mémoire typées prennent en charge le découpage et les vues. – hpaulj

+0

@hpaulj Oui, ils mentionnent explicitement que dans le tutoriel lié et la raison en est "que vous pouvez continuer à utiliser des objets Python pour un découpage dynamique sophistiqué, tout comme lorsque le tableau n'est pas tapé". Aucune idée de comment cela se rapporte aux visions de mémoire, mais je suppose qu'ils soutiennent la plupart des opérations de découpage en forme de tableau? – MSeifert