2016-05-12 6 views
1

Ich versuche mit Numba die Geschwindigkeit von Code, den ich geschrieben habe, zu verbessern, der ziemlich langsam ist. Der Großteil der Zeit besteht aus einer einzigen Funktion. Zuerst habe ich versucht, nurWarum gibt numba einen Fehler in Bezug auf numpy Methoden, wenn (nopython = True)?

@jit 

vor meiner Funktionsdefinition, die Timing ein wenig verbessert. Dann habe ich versucht,

@jit(nopython=True) 

stattdessen zu verwenden. Von dem, was ich in der Dokumentation gelesen habe, sollten die anonymen Methoden, die ich innerhalb der Funktion verwende, unterstützt werden (z. B. Transponieren). Allerdings bin ich

Failed at nopython (nopython frontend) 
Untyped global name 'transpose' 
+4

Eine vollständige Liste der unterstützten Funktionen finden Sie unter folgendem Link. Auch, Postleitzahl und welche Version Sie verwenden, sonst ist es schwierig zu diagnostizieren, was schief geht: http://numba.pydata.org/numba-doc/latest/reference/numpysupported.html – JoshAdel

+0

Ich bin nicht ganz sicher, wie zu überprüfen welche Version verwende ich. 'numba --verison' scheint nicht zu funktionieren. Ich denke, es ist 0,27,0, aber ich bin mir nicht sicher. – chia

Antwort

2

Um einen Fehler bekommen transpose zu verwenden, müssen Sie es nennen (wie die Dokumentation describe) in Form eines Verfahrens zur Herstellung eines numpy Array. So die folgenden Werke:

import numpy as np 
import numba as nb 

@nb.jit(nopython=True) 
def func(x): 
    y = x.transpose() # or x.T 
    return y 

x = np.random.normal(size=(4,4)) 
x_t = func(x) 

Aber y = np.transpose(x) in der Aufruf der Funktion nicht. Ich nehme an, du machst das letztere. Hinweis: Ich verwende Numba 0.25.0 als Referenz.

+0

Ja, Sie haben Recht. Ich benutzte numpy.transpose (x). – chia