Невозможно изменить numpy массив в вектор - PullRequest
0 голосов
/ 29 февраля 2020

Я пытаюсь преобразовать (N, 1) массив d в (N,) вектор. Согласно этому решению и моему опыту работы с numpy следующий код должен преобразовать его в вектор:

from sklearn.neighbors import kneighbors_graph
from sklearn.datasets import make_circles
X, labels = make_circles(n_samples=150, noise=0.1, factor=0.2)
A = kneighbors_graph(X, n_neighbors=5)
d = np.sum(A, axis=1)
d = d.reshape(-1)

Однако d.shape дает (1, 150)

То же самое происходит, когда я точно копирую код для связанного решения. Почему массив numpy не изменяется?

1 Ответ

0 голосов
/ 29 февраля 2020

Проблема в том, что функции sklearn возвращали граф ближайшего соседа как sparse.csr.csr_matrix. Применение np.sum вернуло numpy.matrix, тип данных, который (на мой взгляд) больше не должен существовать. numpy.matrix с несовместимы практически со всем, и операции numpy над ними возвращают неожиданные результаты.

Решением было преобразование numpy.csr.csr_matrix в numpy.array:

A = kneighbors_graph(X, n_neighbors=5)
A = A.toarray()
d = np.sum(A, axis=1)
d = d.reshape(-1)

Теперь у нас есть d.shape = (150,)

...