python - 为什么 numpy 在我实际尝试转换 int 时告诉我无法转换 float NaN?
问题描述
这是一个简单的numpy数组:
import numpy as np
x = np.array([15, 22, 3])
我想将第二个值转换为 nan:
x[1] = np.nan
它返回以下错误:
ValueError: cannot convert float NaN to integer
print(type(x[1])) # this returns "<class 'numpy.int32'>"
我设法通过将整数数组转换为浮点数组来用 NaN 替换所需的值。
但还是。为什么当我实际尝试转换int时numpy 告诉我无法转换float NaN?
谢谢
解决方案
在numpy
,nan
是一个特殊的float
:
>>> type(np.nan)
<class 'float'>
我称它为一种特殊类型的浮点数,因为如果您尝试将两者都添加到单个 numpy 数组中,通常 Python 不会抱怨,int
因为float
整数将自动转换为float
:
>>> x = np.array([-1, float(10.12)])
>>> x
>> array([-1. , 10.12])
但情况并非如此numpy.nan
:
非数字 (NaN) 的 IEEE 754 浮点表示。
我建议要么创建一个 numpy 浮点数组:
import numpy as np
x = np.array([15.0, 22.0, 3.0])
x[1] = np.nan
>>> array([15., nan, 3.])
或者如果您的用例允许这种表示,请尝试nan
使用替代整数值表示。例如用于-1
表示nan
(例如,如果在您的用例中您没有负值,这将是有意义的)。
或者,您可以使用list
允许您存储不同数据类型的对象:
l = [15, 22, 3]
l[1] = np.nan
>>> [15, nan, 3]
推荐阅读
- amazon-web-services - 如何将在特定端口上运行的 Flask Server 链接到域名?
- javascript - 从 jquery 事件中按需选择性地关闭单个子 python 进程
- javascript - Velocity 模板 - 在velocity foreach 中使用java 脚本变量
- python - OpenCV 无法从 MJPEG 流中读取视频
- php - 在 WooCommerce 我的帐户查看订单页面的订单详细信息下添加自定义文本
- javascript - 数据发布到服务器时自动刷新
- python - 为什么重新定义 __getattr__() 的对象会抛出 TypeError?
- javascript - 如何在 Array.map() 函数中使用箭头函数和 react
- mysql - 为什么 UNION 比使用 OR 的 LEFT JOIN 快得多?
- android - 如何在 AndroidX 中设置导航控制器?