Python Numpy:用另一个数组中的对应值替换一个数组中的值

Posted

技术标签:

【中文标题】Python Numpy:用另一个数组中的对应值替换一个数组中的值【英文标题】:Python Numpy: replace values in one array with corresponding values in another array 【发布时间】:2017-09-21 07:06:55 【问题描述】:

我正在使用 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]])

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]])

我真的不想更改数组的形状或尺寸,因为我要在之后转换回栅格,所以我需要在正确的位置有正确的值。 最好的方法是什么?

【问题讨论】:

查看masking 是的,我对此进行了调查,并且能够使用以下命令屏蔽掉 array_a 中的 -999 值: mask_a = ma.masked_where(array_a 【参考方案1】:

只做布尔掩码:

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

【讨论】:

嘿,太好了!我认为这行得通!谢谢! >>> 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[mask] >>> print 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]] >>>【参考方案2】:

你需要做的就是

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]

运行这个 sn-p

【讨论】:

我怀疑这是否有帮助——甚至根本没有用。为了说服我,请解释它是如何工作的以及为什么它应该解决问题。 这很简单,您只需要同时满足两者条件的部分。 请在您的答案中解释(如何以及为什么)。 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助、质量更好,并且更有可能吸引投票。 @DimaKozhevin 我已经更新了。请再看一遍

以上是关于Python Numpy:用另一个数组中的对应值替换一个数组中的值的主要内容,如果未能解决你的问题,请参考以下文章

无需在 Python 中迭代即可创建 Numpy 数组

Numpy 布尔型数组

python基于组合逻辑判断替换numpy数组中的满足条件的元素相等判断替换numpy数组中的指定数值为另一个数值大小判断替换numpy数组中大于指定阈值的数值为另一个值

规范化python中的numpy数组列

python库之numpy学习---nonzero()用法

内存中的高效矢量位数据“旋转”/“重新排列”[例如在 Python 中,Numpy] [关闭]