Преобразование из числового массива float32 в числовой массив float64
Я пытаюсь реализовать randomforest в Python. Во время выполнения кода я получил эту ошибку. Хотя я уже перешел из float32
в float64
с помощью:
x_arr = np.array(train_df, dtype='float64')
Traceback(most recent call last):
File "C:\Python27\randomforest.py", line 67, in <module>
forest=forest.fit(x_array[0::,1::],x_array[0::,0])
File "C:\Python27\lib\site-packages\sklearn\ensemble\forest.py", line 212, in fit
X = check_array(X, dtype=DTYPE, accept_sparse="csc")
File "C:\Python27\lib\site-packages\sklearn\utils\validation.py", line 398, in check_array
_assert_all_finite(array)
File "C:\Python27\lib\site-packages\sklearn\utils\validation.py", line 54, in _assert_all_finite
" or a value too large for %r." % X.dtype)
ValueError: Input contains NaN, infinity or a value too large for dtype('float32').
Пожалуйста, кто-нибудь может помочь?
2 ответа
Проблема не в том, что вы не можете установить тип float64 dtype. Сообщение об ошибке говорит:
Входные данные содержат NaN, бесконечность или значение, слишком большое для dtype('float32').
Поэтому попробуйте сначала проверить эти условия:
assert not np.any(np.isnan(x_arr))
assert np.all(np.isfinite(x_arr))
assert np.all(x_arr <= finfo('float32').max)
assert np.all(x_arr >= finfo('float32').min)
Я попал сюда из-за вопроса в названии, который до сих пор остается без ответа. Преобразовать float32
в float64
в numpy.ndarray
объект:
array32 = np.ndarray(shape=(2,2), dtype=np.float32, order='F')
print("Type of an object of 'array32': " + str(type(array32[0][0])))
# Convert to float64
array64 = array32.astype(np.float64)
print("Type of an object of 'array64': " + str(type(array64[0][0])))
# Convert back to float32
array32again = array64.astype(np.float32)
print("Type of an object of 'array32again': " + str(type(array32again[0][0])))
Дам тебе:
Type of an object of 'array32': <class 'numpy.float32'>
Type of an object of 'array64': <class 'numpy.float64'>
Type of an object of 'array32again': <class 'numpy.float32'>