2016-10-09 12 views
1

I haben die folgenden (mit Python pandas):schnellste Weg Vektor in Python zu berechnen

y: n um 1 Datenrahmen

x: n von k Datenrahmen

theta: k um 1 Datenrahmen

Jedes der Elemente in den obigen Datenrahmen enthält eine reelle Zahl.

Ich brauche einen Datenrahmen w, wobei w = y'x (‘Transponierte bezeichnet), aber nur die w Beobachtungen enthält, für die y multiplizierte elementweise durch (x * theta) ist kleiner als 1. In anderen Worten, Die Dimension von w ist höchstens n um k, und es gibt weniger Reihen, wenn einige Beobachtungen die Kriterien nicht erfüllen.

Was ist der schnellste Weg (in Bezug auf die Zeit) zu bekommen?

+1

Gibt es einen Grund, dass Sie diesen Vorgang mit Pandas Datenrahmen durchführen müssen, statt np.matrix? – Mai

+0

Weil ich es mit pandas.read_csv geladen habe. Eigentlich wollte ich fragen, wird es mit np.matrix oder Pandas Dataframe schneller gehen? – wwl

+0

Ja in den meisten Fällen. Momentan kann ich mir keine Randfälle vorstellen, in denen die Antwort nein ist, aber es kann ein oder zwei geben. Sie können entweder die Eingabe mit np.loadtxt laden, dann np.darray in np.matrix konvertieren oder die df.values ​​in np.matrix konvertieren. – Mai

Antwort

3

Verwenden .values zuzugreifen zugrunde liegende numpy Arrays

Y = y.values 
X = x.values 
Th = theta.values 

W = Y.T.dot(X) 

mask = Y * X.dot(Th) < 1 

w = pd.DataFrame(W[mask], y.index[mask]) 
Verwandte Themen