Я не могу изменить форму массива numpy

Я не могу изменить форму массива numpy

dataset[i].shape   # (1134, )
dataset[i] = dataset[i].reshape((18, 63))

ValueError: could not broadcast input array from shape (18,63) into shape (1134)

Изменение формы сработало; проблема в том, что вы не можете установить строку матрицы в измененный массив numpy (это то, что вы пытаетесь сделать с dataset[i] = ...).

ssp 16.12.2020 09:55
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
320
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Массив в LHS — это dataset[i], который имеет форму (1134,).

Массив на RHS имеет форму (18,63) из-за (успешного) reshape().

При таком поэлементном назначении либо массив LHS, либо массив RHS должны иметь одинаковую форму, либо массив RHS должен транслироваться в форму массива LHS. Так получилось, что по правилам трансляции форма (18,63) не может транслироваться в форму (1163,). Это причина сообщения об ошибке.

В заголовке вашего вопроса говорится: «Я не могу изменить форму массива numpy», но это не то, что пытается сделать ваш код.

Если по какой-то причине вы думали, что можете изменить форму dataset[i], а не форму dataset, и если это было первоначальным намерением вашего кода, это невозможно — вы не можете изменить форму фрагмента массив.

Даже если вы сделаете dataset.reshape(-1, 18, 63), это не изменит форму dataset «на месте». Вместо этого dataset.reshape(-1, 18,63) вернет новый массив numpy с указанной формой, которая является представлением dataset (он использует базовые данные dataset).

Другие вопросы по теме