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