Skip to main content
 首页 » 编程设计

python之将 numpy float 组转换为整数,替换 NaN 值

2025年05月04日21zfyouxi

我有一个包含值和 NaN 的 float64 numpy 数组:

[[ 5. nan nan nan nan nan nan nan nan nan nan nan nan] 
 [nan  6. nan nan nan nan nan nan nan nan nan nan nan] 
 [nan  7.  5. nan nan nan nan nan nan nan nan nan nan] 
 [nan nan nan  7. nan nan nan nan nan nan nan nan nan] 
 [nan nan nan nan  4. nan nan nan nan nan nan nan nan] 
 [nan nan nan nan  5.  3. nan nan nan nan nan nan nan] 
 [nan nan nan nan nan nan nan nan nan nan nan nan nan] 
 [ 1. nan nan nan nan nan nan  4. nan nan nan nan nan] 
 [nan nan nan nan nan nan  7. nan nan nan nan nan nan] 
 [nan nan nan nan nan nan nan nan nan  7. nan nan nan] 
 [nan nan nan nan nan nan  7. nan  7. nan  6. nan nan] 
 [nan nan nan nan nan nan nan nan nan nan nan  7. nan] 
 [nan nan nan nan nan nan nan  6. nan nan nan nan  5.]] 

我想将所有数字转换为整数,但 np.round 或 np.around 似乎无法完成这项工作。另外,我无法更改数组的类型,因为整数类型的数组不支持“nan”。我该怎么做?

请您参考如下方法:

将 NaN 转换为零: numpy.nan_to_num(arr) , 直接作用于数组,以及单个值。 (使用 ..., copy=False arg 避免浪费内存,即就地操作。)

所以要同时进行 NaN 替换和类型转换:numpy.nan_to_num(arr).astype(np.int)

from numpy import array, nan 
arr = np.array([[5., nan, nan], [nan, 6., nan], [nan, 7., 5.]]) 
 
arr = np.nan_to_num(arr, copy=False).astype(np.int) 
array([[5, 0, 0], 
       [0, 6, 0], 
       [0, 7, 5]]) 

将 NaN 转换为任何其他特定值: 您没有说要用什么值替换 NaN 。如果你想要一个不同于零的替换值,你需要使用逻辑索引来实现:arr[np.isnan(arr)] = -99 然后 .astype(np.int )。