pythonnumpy:将一个数组中的值替换为另一个数组中的相应值
我使用的是Python Numpy数组(具体来说,是转换为2D数组的光栅),我想做的是取一个数组,该数组具有表示“无数据”的任意伪值-999,我想用正确位置相同大小和形状的不同数组中相应的“实”值替换这些值。我找不到与此非常类似的问题,但请注意,我是Python和Numpy的新手 但我想做的是:pythonnumpy:将一个数组中的值替换为另一个数组中的相应值,python,arrays,python-2.7,numpy,Python,Arrays,Python 2.7,Numpy,我使用的是Python Numpy数组(具体来说,是转换为2D数组的光栅),我想做的是取一个数组,该数组具有表示“无数据”的任意伪值-999,我想用正确位置相同大小和形状的不同数组中相应的“实”值替换这些值。我找不到与此非常类似的问题,但请注意,我是Python和Numpy的新手 但我想做的是: array_a = ([[0.564,-999,-999], [0.234,-999,0.898], [-999,0.124,0.687], [0.478,0.786,-999]]) arr
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]])
使用数组_b的值填充数组_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]])
我真的不想更改阵列的形状或尺寸,因为之后我将转换回光栅,所以我需要在正确的位置使用正确的值。
执行此操作的最佳方法是什么?只需执行布尔掩蔽:
mask = (array_a == -999)
new_array = np.copy(array_a)
new_array[mask] = array_b[mask]
你需要做的就是
array_a[array_a==-999]=array_b[array_a==-999]
我们正在对要更新的数组元素设置布尔条件,其值应为-999
import numpy as np
array_a =np.array([[0.564,-999,-999],
[0.234,-999,0.898],
[-999,0.124,0.687], [![enter image description here][1]][1]
[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]])
array_a[array_a==-999]=array_b[array_a==-999]
运行此代码段
深入研究。是的,我研究了这个问题,我能够用以下方法屏蔽数组a中的-999个值:mask\u a=ma。masked\u where(array\u a<-1,array\u a),但接下来呢?我刚刚删除了-999值,我不知道如何将数组_b中的值放到相同的位置?嘿,太好了!我认为这是可行的!谢谢!>>>[0.564,-999,--999,--999,,…[0.234,--999,0.999,0.999,0.898,,,…[999.999,0.124,0.124,0.687 7,,,…[0.124,0.124,0.124,0.124,0.124,0.124,0.687 7 7 7 7 7,,,…[0.124,0.124,0.124,0.687 7 7 7 7 7 7,,,,,,…[0.0.0.124,0.124,0.687 7 7 7 7 7 7 7 7 0.0.0.0.7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7,,,,,,,,,,,,,,,…[0.0.0.0.0.0.0.0.7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7掩码]=数组_b[掩码]>>>打印新的_数组[[0.564 0.254 0.204][0.234 0.381 0.898][0.55 0.124 0.687][0.478 0.786 0.551]>>>>我怀疑这是否有用,甚至根本不起作用。为了让我信服,请解释这是如何工作的,以及为什么它应该解决问题。很简单,你只考虑那些对这两种情况都适用的部分。请在你的答案中解释(如何和为什么)。请不要只发布代码作为答案,但也要解释一下你的代码是做什么的,以及它是如何解决问题的。带有解释的答案通常更有帮助,质量更好,更有可能吸引更多的选票。@DimaKozhevin我已经更新了它。请再看一遍