0

我有两个 numpy.ndarray,我找到了一个不优雅的解决方案(使用超过 4 行代码)用 data1 屏蔽 data2。我要求一个优雅的解决方案,节省线路:

例子。

data1 = np.array([[1,2,np.nan,4,5],[np.nan,7,np.nan,9,np.nan],[11,12,13,14,np.nan],[np.nan,17,np.nan,19,20]])
data2 = np.ones((6, 4))

print data1
[[  1.   2.  nan   4.   5.]
 [ nan   7.  nan   9.  nan]
 [ 11.  12.  13.  14.  nan]
 [ nan  17.  nan  19.  20.]]
>>> print data2
[[ 1.  1.  1.  1.]
 [ 1.  1.  1.  1.]
 [ 1.  1.  1.  1.]
 [ 1.  1.  1.  1.]
 [ 1.  1.  1.  1.]
 [ 1.  1.  1.  1.]]

我希望得到的结果是:

[[  1.   2.  1   4.   5.]
 [ 1   7.  1   9.  1]
 [ 11.  12.  13.  14.  1]
 [ 1  17.  1  19.  20.]]

换句话说,其中 data1 是 nan data2 的值

提前感谢您的帮助和建议。我用超过 4 行代码做到了这一点

4

1 回答 1

2

假设您的意思是将 data1 和 data2 作为相同大小的数组(这会将您的示例更改为读取):

data2 = np.ones((4, 5))

单线方法是:

data1[np.isnan(data1)] = data2[np.isnan(data1)]
于 2012-10-05T16:59:56.480 回答