将浮点数的numpy数组转换为整数,替换NaN值

时间:2018-12-09 22:41:11

标签: python arrays numpy type-conversion nan

我有一个float64 numpy数组,其中包含值以及NaN:

[[ 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.roundnp.around似乎并不安静。另外,我无法更改数组的类型,因为整数类型的数组不支持“ nan”。我该怎么做?

2 个答案:

答案 0 :(得分:2)

要将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)

答案 1 :(得分:1)

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

假设此数组的名称为repr({fruit: maxfruit for fruit in fruits}) ,然后:

x

现在,您可以将数据转换为整数。