【发布时间】:2020-05-16 00:15:22
【问题描述】:
这是一个一维数组:
a = np.array([1, 2, 3])
我正在尝试用np.nan 替换所有元素。当然,我会尝试:
a[:] = np.nan
最终返回:
array([-9223372036854775808, -9223372036854775808, -9223372036854775808])
所以问题很简单:为什么它不起作用。
附:目前我只是在使用
a = np.array([np.nan for a_i in a])
实现我想做的事情。
【问题讨论】:
-
np.full_like(a, np.nan, dtype=float)也可以使用 -
事实上这是 NumPy 中的一个错误。默认情况下,NumPy 尝试将任何分配的值转换为数组类型。所以如果你做了
a[:] =1.3你只会得到一个数组,因为a类型是整数。但是,从np.nan到整数的转换没有明确定义,实际上a[0] = np.nan失败了,但似乎切片分配操作没有正确执行此检查。 -
@jdehesa np.iinfo(np.int64) ==> iinfo(min=-9223372036854775808, max=9223372036854775807, dtype=int64) ...所以这不是错误,而是尝试返回与可能被视为 nodata 的适当整数 dtype 相关联的内容
-
其实已经是报过的问题了:Nan are converted to int with slicing #4592
-
@cssstudent 这是因为
np.full_like(a)在构造新数组时复制了a的dtype(当没有给出其他dtype时)并且np.full(len(a))使用默认的dtype(它是浮点数)在构造新数组时。