надеюсь, что все в порядке. Я пытаюсь использовать следующий метод для эффективного вычисления косинусного сходства разреженной матрицы (29805, 40), созданной HashingVectorizing (Sklearn) в моем наборе данных. Метод ниже взят из ответа @Waylon Flinn на этот вопрос.
def cosine_sim(A):
similarity = np.dot(A, A.T)
# squared magnitude of preference vectors (number of occurrences)
square_mag = np.diag(similarity)
# inverse squared magnitude
inv_square_mag = 1 / square_mag
# if it doesn't occur, set it's inverse magnitude to zero (instead of inf)
inv_square_mag[np.isinf(inv_square_mag)] = 0
# inverse of the magnitude
inv_mag = np.sqrt(inv_square_mag)
# cosine similarity (elementwise multiply by inverse magnitudes)
cosine = similarity * inv_mag
return cosine.T * inv_mag
Когда я пытаюсь использовать фиктивную матрицу, все работает нормально.
A = np.random.randint(0, 2, (10000, 100)).astype(float)
cos_sim = cosine_sim(A)
но когда я пытаюсь использовать свою собственную матрицу ...
cos_sim = cosine_sim(sparse_matrix)
I get
ValueError: Input must be 1- or 2-d.
Теперь вызов .shape в моей матрице возвращает (29805, 40). Как это не 2-й? Может кто подскажет, что я здесь делаю не так? Ошибка возникает здесь (из трассировки ноутбука jupyter):
----> 6 square_mag = np.diag(similarity)
Спасибо за чтение! Для контекста вызов sparse_matrix возвращает это
<29805x40 sparse matrix of type '<class 'numpy.float64'>'
with 1091384 stored elements in Compressed Sparse Row format>