转换" nan"在numpy矩阵中,值变为不同于0的值

时间:2016-02-02 10:16:06

标签: python numpy matrix nan

我有这样一个numpy矩阵:

[[182 93 107 ..., nan nan -1]
 [182 93 107 ..., nan nan -1]
 [182 93 110 ..., nan nan -1]
 ..., 
 [188 95 112 ..., nan nan -1]
 [188 97 115 ..., nan nan -1]
 [188 95 112 ..., nan nan -1]]

我想将nan值更改为不等于零的值。出于这个原因,我使用了这种技术:

x_train[np.isnan(x_train)] = -10

但我收到了这个错误:

  

TypeError:ufunc' isnan'不支持输入类型和   输入无法安全地强制转换为任何支持的类型   施法规则'安全'。

如何解决此问题?

谢谢,

3 个答案:

答案 0 :(得分:2)

如果您的初始数组是可以有意义地解释为float的字符串,那么您可以使用astype进行转换:

b = np.array([['182', '93', '107', 'nan', 'nan', '-1'],
 ['182', '93', '107', 'nan', 'nan', '-1'],
 ['182', '93', '110', 'nan', 'nan', '-1'],
 ['188', '95', '112', 'nan', 'nan', '-1'],
 ['188', '97', '115', 'nan', 'nan', '-1'],
 ['188', '95', '112', 'nan', 'nan', '-1']])

c = b.astype(np.float)
c[np.isnan(c)]=-10

array([[ 182.,   93.,  107.,  -10.,  -10.,   -1.],
       [ 182.,   93.,  107.,  -10.,  -10.,   -1.],
       [ 182.,   93.,  110.,  -10.,  -10.,   -1.],
       [ 188.,   95.,  112.,  -10.,  -10.,   -1.],
       [ 188.,   97.,  115.,  -10.,  -10.,   -1.],
       [ 188.,   95.,  112.,  -10.,  -10.,   -1.]])

答案 1 :(得分:1)

您可以使用numpy的copyto功能:

import numpy as np

xtrain = np.array([[0.3, np.nan],[1.0, np.nan]])
default = np.empty([2,2])
default.fill(-10)
print(xtrain)
np.copyto(xtrain,default,'no',np.isnan(xtrain))
print(xtrain)

答案 2 :(得分:1)

您可以尝试使用数组itterator,例如:

import numpy as np


a = np.empty((6,4))
a.fill(0.25)
a[2].fill(np.nan)      
for x in np.nditer(a, op_flags=['readwrite']):
    if np.isnan(x):
        x[...]=-10