X, Y = check_pairwise_arrays(X, Y)
X_normalized = normalize(X, copy=True)
if X is Y:
Y_normalized = X_normalized
else:
Y_normalized = normalize(Y, copy=True)
K = safe_sparse_dot(X_normalized, Y_normalized.T,
dense_output=dense_output)
return K
check_pairwise_arrays
определяет, если вы передали Y
. В вашем случае вы этого не сделали. Если нет, то Y
будет таким же, как X
. Как при указании на ту же ячейку памяти. cosine_similarity
, похоже, отлично справляется с памятью.
Однако это не так. Вы создаете совершенно новый фрейм данных df.T
без необходимости. Сделайте это вместо этого.
df = pd.DataFrame(cosine_similarity(df.to_numpy().T))
Таким образом, вы указываете на массив Numpy, который лежит в основе фрейма данных. Это не должно быть создание нового объекта. Затем транспонирование этого массива также должно указывать на те же значения в памяти. Кроме того, я не уверен в этом на 100%, но это мои лучшие рассуждения на данный момент.