2017-04-24 47 views
3

我使用Python numpy的陣列替換的值(轉換成2D陣列柵格,特異性)和我想要做的是採取具有-999任意虛擬值一個陣列表示「無數據」,我想從一個不同的陣列中的正確的位置相同的大小和形狀與相應的「真實」值替換那些值。我找不到一個非常類似的問題,但請注意,我是Python和Numpy的新手。的Python numpy的:在一個陣列中與相應的值在另一個陣列

但我想要做的是這樣的:

array_a = 
([[0.564,-999,-999], 
[0.234,-999,0.898], 
[-999,0.124,0.687], 
[0.478,0.786,-999]]) 

array_b = 
([[0.324,0.254,0.204], 
[0.469,0.381,0.292], 
[0.550,0.453,0.349], 
[0.605,0.582,0.551]]) 

使用array_b的價值觀,以填補在array_a的-999值,並創建一個新的數組:

new_array_a = 
([[0.564,0.254,0.204], 
[0.234,0.381,0.898], 
[0.550,0.124,0.687], 
[0.478,0.786,0.551]]) 

我不噸真的想改變數組的形狀或尺寸,因爲我要回來了轉換成光柵之後,所以我需要在正確的位置正確的價值觀。 這樣做的最好方法是什麼?

+4

查找到['masking'](https://docs.scipy.org/doc/numpy/user/basics.indexing.html#boolean-or-mask -index陣列)。 – Divakar

+0

是的,我看了一下,我能夠掩飾出array_a中的-999值,使用此: mask_a = ma.masked_where(array_a <-1,array_a) 但那又如何?我剛剛刪除了-999值,我不知道如何從array_b中的值到相同的位置? – Matt

回答

5

只是做布爾掩蔽:

mask = (array_a == -999) 
new_array = np.copy(array_a) 
new_array[mask] = array_b[mask] 
+0

嘿,很好!我認爲這是有效的!謝謝! >>> array_a = np.array([[0.564,-999,-999],... [0.234,-999,0.898],... [-999,0.124,0.687], 。 .. [0.478,0.786,-999]]) >>> array_b = np.array([[0.324,0.254,0.204],... [0.469,0.381,0.292],... [0.550, 0.453,0.349], ... [0.605,0.582,0.551]]) >>> mask =(array_a == -999) >>> new_array = np.copy(array_a) >>> new_array [mask ] = array_b [掩模] >>>打印new_array [[0.564 0.254 0.204] [0.234 0.381 0.898] [0.55 0.124 0.687] [0.478 0.786 0.551]] >>> – Matt