2017-02-09 15 views
-1

В настоящее время у меня есть элемент X, который имеет форму (33,). Я хотел бы изменить это на (33, 501), так как знаю, что каждая строка имеет 501 элемент. Fe. X[0] = [0, 1, 0, 0, .. 0, 1] Я попыталсяPython - изменить форму объекта?

np.reshape(X, (33,501)) 

Но это ошибки с ValueError: total size of new array must be unchanged. Хотя каждая строка имеет длину 501.

+2

'x' не имеет«строк», это форма' (33,) '... Очевидно, вы ошибается. –

+0

Какие типы 'X' и' X [0] '? то, что может работать, это 'X = np.array (X)' –

+0

'X.dtype' возвращает' dtype ('O') ',' X [0] '- это список. –

ответ

1

Структура вы, начиная с не 2-й массив, но 1-d, содержащий массив из списков в качестве своих элементов. Это может выглядеть похоже, но на самом деле совсем другое.

Типичный (есть исключения) m x n array - это линейный блок из mn элементов вместе с некоторыми «метаданными», позволяющий numpy интерпретировать вашу индексацию (например, [i, j]) правильным образом.

Ваш массив, напротив, является 1-м блоком ссылок на объекты (указатели на языке c), поэтому это добавляет еще один уровень косвенности, если вы хотите разрешить отдельный элемент. Сначала извлеките список, затем его элемент.

В вашем массиве не предусмотрено большинство удобств и улучшений скорости, которые имеет нужный массив, поэтому лучше всего его преобразовать.

Как правило, фабрика np.array преобразует вложенные последовательности совместимых длин в максимально возможный массив. Ваш случай является исключением, поскольку, технически, это уже массив, поэтому np.array просто мелко копирует его (он копирует ссылки на список, но не сами списки), включая форму.

Один из способов обойти это приведение к списку перед преобразованием:

np.array(list(original_array)) 
0

Я предполагаю, что у вас есть список из 33 списков, длина которых составляет 501.

вы можете преобразовать это в двумерный массив (матрицу) или в кадр данных, который можно выполнить несколькими различными способами; простым было бы:

df = pd.DataFrame([]) 

counter = 0 

for array in X: 

    df['column_%d' %counter] = array 

    counter = counter + 1 

 Смежные вопросы

  • Нет связанных вопросов^_^