我有这样一个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'不支持输入类型和 输入无法安全地强制转换为任何支持的类型 施法规则'安全'。
如何解决此问题?
谢谢,
答案 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