1

我有一个包含值和 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”。我该怎么做呢?

4

2 回答 2

3

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

因此,先进行 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)] = -99then .astype(np.int).

于 2018-12-09T23:01:50.353 回答
2

问题是,这些应该转换成什么值?

假设这个数组是 names x,那么:

x[np.isnan(x)] = 0 # value you want to replace NaN with

现在,您可以按照自己的方式将数据转换为整数。

于 2018-12-09T22:51:40.913 回答