2012-10-05 76 views
0

我有兩個numpy.ndarray,我發現一個不優雅的解決方案(使用多於4行代碼)來掩蓋與data1 data2。我問一個優雅的解決方案,節省線做:Python:掩蓋numpy.ndarray與另一個numpy.ndarray與優雅的解決方案

例如。

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.]] 
換句話說

,其中數據1是楠數據2的值

預先感謝幫助和建議。我這樣做是有超過4行代碼

回答

2

假設你的意思是有數據1和數據2一樣大小的數組(這將改變你的榜樣閱讀):

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

一個行的方法是:

data1[np.isnan(data1)] = data2[np.isnan(data1)]