проблемы с хранением и извлечением массивов в numpy файле - PullRequest
0 голосов
/ 28 июня 2018

Однако, пытаясь сохранить массив в пустом файле, пытаясь извлечь его и использовать, получая сообщение об ошибке, пытаясь применить массив к последовательности.

Это два массива, которые не уверены, какой из них вызывает проблему.

X = [[1,2,3],[4,5,6],[7,8,9]]
y = [0,1,2,3,4,5,6....]

при попытке получить его и использовать для получения значений:

X: array(list[1,2,3],list[4,5,6],list[7,8,9])
y = array([0,1,2,3,4,5...])

Вот код:

vectors = np.array(X)
labels = np.array(y)

При получении работ на t-sne

visualisations = TSNE(n_components=2).fit_transform(X,y)

Я получаю следующую ошибку:

ValueError                                Traceback (most recent call last)
<ipython-input-11-244f99341167> in <module>()
----> 1 visualisations = TSNE(n_components=2).fit_transform(X,y)

C:\ProgramData\Anaconda3\lib\site-packages\sklearn\manifold\t_sne.py in fit_transform(self, X, y)
    856             Embedding of the training data in low-dimensional space.
    857         """
--> 858         embedding = self._fit(X)
    859         self.embedding_ = embedding
    860         return self.embedding_

C:\ProgramData\Anaconda3\lib\site-packages\sklearn\manifold\t_sne.py in _fit(self, X, skip_num_points)
    658         else:
    659             X = check_array(X, accept_sparse=['csr', 'csc', 'coo'],
--> 660                             dtype=[np.float32, np.float64])
    661         if self.method == 'barnes_hut' and self.n_components > 3:
    662             raise ValueError("'n_components' should be inferior to 4 for the "

C:\ProgramData\Anaconda3\lib\site-packages\sklearn\utils\validation.py in check_array(array, accept_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator)
    431                                       force_all_finite)
    432     else:
--> 433         array = np.array(array, dtype=dtype, order=order, copy=copy)
    434 
    435         if ensure_2d:

ValueError: setting an array element with a sequence.

Ответы [ 2 ]

0 голосов
/ 28 июня 2018
array(list[1,2,3],list[4,5,6],list[7,8,9])

является массивом dtype объекта 1d. Чтобы получить это от

[[1,2,3],[4,5,6],[7,8,9]]

требует более np.array([[1,2,3],[4,5,6],[7,8,9]]); Либо элементы списка должны различаться по размеру, либо вам нужно инициализировать массив объектов и скопировать в него значения списка.

В любом случае fit_transform не может обрабатывать такие массивы. Ожидается двумерный числовой тип dtype. Обратите внимание на параметры функции check_array.

Если все элементы списка X имеют одинаковый размер, то

X = np.stack(X)

должно превратить его в двумерный числовой массив.

Я подозреваю, X был типом массива 1d объектов перед сохранением. Сам по себе save/load не должен превращать двумерный числовой массив в объектный.

0 голосов
/ 28 июня 2018

Если я вас правильно понял, вам нужно упаковать первую группу в список; как то так:

import numpy as np

#X = [[1,2,3],[4,5,6],[7,8,9]]
#y = [0,1,2,3,4,5,6, 7, 8, 9]

X = np.array([[1,2,3],[4,5,6],[7,8,9]])
y = np.array([0,1,2,3,4,5, 6, 7, 8, 9])
...