从 numpy 数组 float32 转换为 numpy 数组 float64

Posted

技术标签:

【中文标题】从 numpy 数组 float32 转换为 numpy 数组 float64【英文标题】:Conversion from numpy array float32 to numpy array float64 【发布时间】:2016-11-16 01:07:56 【问题描述】:

我正在尝试在 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').  

有人可以帮忙吗?

【问题讨论】:

当您尝试使用dtype=np.float64 时会发生什么? 【参考方案1】:

我来到这里是因为标题中的问题我仍然觉得没有答案。 在numpy.ndarray 对象中将float32 转换为float64

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'>

【讨论】:

【参考方案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)

【讨论】:

以上是关于从 numpy 数组 float32 转换为 numpy 数组 float64的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Pandas 将我的 numpy float32 强制转换为 float64?

如何将 2D float numpy 数组转换为 2D int numpy 数组?

是否可以在不强制转换的情况下初始化 float32 或 float16 的随机数组?

将数据从CSV转换为numpy数组时出错

TypeError:不允许隐式转换为 NumPy 数组。请使用 `.get()` 显式构造 NumPy 数组。 -CuPy

有没有办法将 numpy 数组转换为数据框,然后再转换回 numpy 数组并仍保持原始形状?