Участвуйте в 14-м дне Ноябрьского испытания обновлений, узнайте подробности события:Вызов последнего обновления 2021 г.
проблема появляется
Глядя на код сегодня, вы видите фрагмент кода, который инициализируется случайным образом.np.random.normal
, это выглядит более проблематично при просмотре данных, поэтому я изменил его наnp.arange
. Потом начинает выдавать ошибки.
Давайте сначала посмотрим на исходный код:
features = np.random.normal(size=(4, 1))
np.random.shuffle(features)
poly_features = np.power(features, np.arange(5).reshape(1, -1))
for i in range(5):
poly_features[:, i] /= math.gamma(i + 1)
- Функция случайной инициализации дисплея, двухмерная, форма 4*1
- перемешать в случайном порядке
- poly_feature предназначен для хранения функций от 0-й степени до 4-й степени
- Затем разделите каждый элемент poly_feature на его факториал,
gamma(n)
Это факториал n-1 или (n-1)!
Потом я начал менять код.
features = np.arange(4).reshape(-1,1)
poly_features = np.power(features, np.arange(5).reshape(1, -1))
for i in range(5):
poly_features[:, i] /= math.gamma(i + 1)
- во-первых
arange
необходимо добавить после.reshape(-1,1)
, преобразуется в размерность x*1, x автоматически корректируется в соответствии с количеством элементов.- Если он объединен, он сообщит об ошибке, что механизм широковещательной рассылки не может быть использован.
operands could not be broadcast together with shapes (4,) (1,5)
- Поскольку по умолчанию используются одномерные 4 элемента, а не двумерные 4*1, механизм трансляции использовать нельзя.
- Так как код проверяется просмотром данных, я случайным образом перемешиваю элементы
np.random.shuffle(features)
Это предложение было удалено. - с последующим
for i in range():
Этот цикл выдаст ошибку- Причина в том, что типы данных не совпадают, массив, сгенерированный аранжировкой, не является числом с плавающей запятой, для которого требуется число с плавающей запятой..
TypeError: ufunc 'true_divide' output (typecode 'd') could not be coerced to provided output parameter (typecode 'i') according to the casting rule ''same_kind''
преобразование типа данных numpy
Как преобразовать его в float.
-
poly_features = poly_features.astype(np.float32)
Добавьте приведенное выше предложение после polyfeatures.
-
Или, чтобы избежать проблем, вы можете напрямую использовать умножение чисел для принудительного преобразования типа,
- Например
poly_features = np.power(features, np.arange(5).reshape(1, -1))*1.0
- ноне можетизменить обратно
poly_features[:, i] = poly_features[:, i]*1.0/math.gamma(i + 1)
, последующие изменения не вступят в силу. Хотя об ошибке не сообщается, данные результата по-прежнему имеют тип int.
- Например
-
Определить тип данных непосредственно во время объявления
features = np.arange(4, dtype = np.float32).reshape(-1,1)