Возможно, что-то вроде этого, где ID - ваш ObjectId. Первый {} необходим для идентификации вашего документа. Не требуется использовать ObjectId, если у вас есть еще один уникальный идентификатор в вашей коллекции.
db.collection.update(
{ "_id": ID, "playlists._id": "58"},
{ "$push":
{"playlists.$.musics":
{
"name": "test name",
"duration": "4.00"
}
}
}
)
Вы не просто забыли поставить скобки вокруг np.array?
init_medians=np.array([...])
ЧАСТЬ 1:
Ошибка TypeEr: объект builtin_function_or_method не может быть подписан
blockquote>Это чистая ошибка
numpy
, и она появляется потому, что вы забыли использовать круглые скобки () для определения массива numpy.
ЧАСТЬ 2:
Прежде всего, в
init_medians
вы пропускаете 4 списка, но они не имеют одинаковые размеры. Последний список содержит 4 элемента (т.е.[0.01, 0.02, 0.03, 0.04]
) вместо 3, чтобы представлять медианы кластера.Во-вторых, аргумент
init
KMeans ожидает в качестве входных данных символ массива (n_clusters, n_features). В вашем случае это должен быть (4, 3) массив пустышек, подобный следующему:init_medians=np.array( [[0.1, 0.2, 0.3], [0.4, 0.5, 0.6], [0.7, 0.8, 0.9], [0.01, 0.02, 0.03]] ) model = KMeans(n_clusters=4, max_iter=300, init=init_medians) model.fit(clean)
ЧАСТЬ 3: Матрица данных X должна быть Numpy массив не список списков.
Полный код:
clean=np.array([[0.1, 0.2, 0.3],[0.1, 0.2, 0.3],[0.1, 0.2, 0.3],[0.1, 0.2, 0.3],[0.1, 0.2, 0.3],[0.1, 0.2, 0.3],[0.1, 0.2, 0.3],[0.1, 0.2, 0.3],[0.1, 0.2, 0.3],[0.1, 0.2, 0.3],[0.1, 0.2, 0.3],[0.1, 0.2, 0.3],[0.1, 0.2, 0.3],[0.1, 0.2, 0.3],[0.1, 0.2, 0.3],[0.1, 0.2, 0.3],[0.1, 0.2, 0.3],[0.1, 0.2, 0.3]]) init_medians=np.array([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6], [0.7, 0.8, 0.9], [0.01, 0.02, 0.03]]) model = KMeans(n_clusters=4, max_iter=300, init=init_medians) model.fit(clean)
Вам нужны скобки для определения массива. «Недопустимый» означает, что вы пытаетесь получить доступ к индексу команды массива.
init_medians=np.array([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6], [0.7, 0.8, 0.9], [0.01, 0.02, 0.03]])
model = KMeans(n_clusters=4, max_iter=300, init=init_medians)
model.fit(clean)
У вас есть вторая проблема, возможно, поскольку последняя строка массива имеет 4 элемента, так что init_medians будет:
array([list([0.1, 0.2, 0.3]), list([0.4, 0.5, 0.6]),
list([0.7, 0.8, 0.9]), list([0.01, 0.02, 0.03, 0.04])]
Скорее отличается от:
np.array([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6], [0.7, 0.8, 0.9], [0.01, 0.02, 0.03]])
[ 116] Если вы удалите один элемент