我有一个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.round
或np.around
似乎并不安静。另外,我无法更改数组的类型,因为整数类型的数组不支持“ nan”。我该怎么做?
答案 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
现在,您可以将数据转换为整数。