Понимание np.zeros в кластеризации

Я учусь кластеризации, и я видел в нескольких уроках кое-что, чего я не совсем понимаю в части мер сходства:

tfidf_vector = TfidfVectorizer()
tfidf_matrix = tfidf_vector.fit_transform(file)

#and/or

count_vector = CountVectorizer()
count_matrix = count_vector.fit_transform(file)

#AND HERE
file_size = len(file)
x = np.zeros((file_size, file_size))
#and here the similarity measures like cosine_similarity, jaccard...

for elm in range(file_size):
    x[elm] = cosine_similarity(tfidf_matrix[i:i+1], tfidf_matrix)

y = np.subtract(np.ones((file_size, file_size),dtype = np.float), x)

new_file = np.asarray(y)
w = new_file.reshape((1,file_size,file_size))

Зачем нам нужен np.zeros? Разве tfidf_matrix/count_matrix не достаточно для измерения сходства?

1 ответ

Решение

Этот код делает то же самое (я изменил i в elm так как похоже на опечатку)

x = []
for elm in range(file_size):
    x.append(cosine_similarity(tfidf_matrix[elm:elm+1], tfidf_matrix)
x = np.asarray(x)

Вы также можете заменить np.zeros на np.empty. Предварительное создание массива и последующее заполнение каждого элемента массива несколько более эффективно, чем добавление в список и его преобразование в массив. Многие другие языки программирования требуют предварительного выделения массивов, как это делает Numpy, поэтому многие люди предпочитают заполнять массив таким образом.

Однако, поскольку это Python, вы должны делать то, что считаете наиболее удобным для себя и других.

Другие вопросы по тегам