Преобразование массива формы x в массив формы (x, y) - PullRequest
1 голос
/ 27 февраля 2020

Я следую руководству по реализации алгоритма K-ближайшего соседа в наборе данных.

У меня есть массив формы (6003,), и я хочу сделать это:

data = data.reshape((data.shape[0], 3072))

Однако я получаю эту ошибку:

не может преобразовать массив размера 6003 в форму (6003,3072)

Помогите, пожалуйста? Спасибо!

Ответы [ 2 ]

2 голосов
/ 27 февраля 2020

при изменении формы массива numpy общее количество элементов не должно изменяться. Например, a =[2,3,4,5,1,7], если вы хотите изменить это в массив 2D, тогда умноженные размеры должны быть равны общему количеству элементов в исходном массиве a. Это означает, что вы можете изменить форму массива a в размерность (1,6) (2,3),(6,1),(3,2).

. Заголовок вашего вопроса, кстати, выдает ошибку.

Изменение формы массива (x,) в массив формы (x,y)

невозможно, потому что вы пытаетесь добавить больше элементов в ваши исходные данные. массив формы (x,) может быть преобразован только в массив формы (x/y,y)

Надеюсь, это поможет.

1 голос
/ 27 февраля 2020

Вы пытаетесь изменить форму в несовместимую форму. Теперь, что я имею в виду под этим? Посмотрите на этот пример:

a = np.array([[1, 2, 3], 
              [4, 5, 6], 
             ])

Форма этого массива:

a.shape
>> (2, 3)

Массив a имеет 2 x 3 = 6 элементов. Давайте попробуем преобразовать его в массив (2, 6)

a.reshape(2, 6)

Это приведет к

>> ValueError: cannot reshape array of size 6 into shape (2,6)

Обратите внимание, что мы пытались превратить массив, содержащий 2 x 3 = 6 элементов, в массив, который будет иметь 2 x 6 = 12 элементов. Но NumPy не может добавить эти дополнительные элементы в исходный массив и придать им желаемую форму. Таким образом, получается ValueError.

В вашем случае вы пытаетесь превратить массив с 6003 элементами в массив, который будет содержать 6003 x 3072 = 18441216 элементов!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...