Самый быстрый способ вычисления вектора в Python

#python #pandas

#python #pandas

Вопрос:

У меня есть следующее (с использованием pandas Python):

y: n на 1 фрейм данных

x: n по k dataframe

тета: k на 1 фрейм данных

Каждый из элементов в приведенных выше фреймах данных содержит действительное число.

Мне нужен фрейм данных w, где w = y’x (‘ обозначает транспонирование), но w содержит только те наблюдения, для которых y, умноженное поэлементно на (x * theta), меньше 1. Другими словами, размерность w составляет не более n на k, и будет меньше строк, если есть некоторые наблюдения, которые не соответствуют критериям.

Какой самый быстрый способ (с точки зрения времени) получить w?

Комментарии:

1. Есть ли причина, по которой вы должны выполнять эту операцию с pandas dataframe вместо np.matrix?

2. Потому что я загрузил его с помощью pandas.read_csv. На самом деле я хотел спросить, будет ли это быстрее с np.matrix или pandas dataframe?

3. В большинстве случаев да. В настоящее время я не могу вспомнить ни одного крайнего случая, в котором ответ отрицательный, но может быть один или два. Вы можете либо загрузить входные данные с помощью np.loadtxt, затем преобразовать np.ndarray в np.matrix, либо получить df.values в np.matrix .

4. Хорошо, с этого момента я начну использовать np-матрицу.

Ответ №1:

Используется .values для доступа к базовым массивам numpy

 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])