2017-04-24 48 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