首页 文章

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

提问于
浏览
0

我有一个包含值和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.roundnp.around 并不安静似乎可以完成这项工作 . 此外,我无法更改数组的类型,因为整数类型数组不支持"nan's" . 我该怎么做呢?

3 回答

  • 2

    使用inf . 像-99999或99999或任何你想要的inf .

  • 0

    To convert NaN to zero: 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]])
    

    To convert NaN to any other specific value: 你没有't say what value you want to replace NaN with. If you want a different replacement value than zero, you'需要使用逻辑索引来做到这一点: arr[np.isnan(arr)] = -99 然后 .astype(np.int) .

  • 0

    问题是,这些转换成什么 Value ?

    假设这个数组是名称 x ,然后:

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

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

相关问题