我正在使用 Python中的2D Numpy masked_array.
我需要更改屏蔽区域中的数据值,使其等于最近的未屏蔽值.

NB.如果有多个最近的未屏蔽值,那么它可以采用任何最接近的值(有一个最简单的代码…)

例如

import numpy
import numpy.ma as ma

a = numpy.arange(100).reshape(10,10)
fill_value=-99
a[2:4,3:8] = fill_value
a[8,8] = fill_value
a = ma.masked_array(a,a==fill_value)

>>> a  [[0 1 2 3 4 5 6 7 8 9]
  [10 11 12 13 14 15 16 17 18 19]
  [20 21 22 -- -- -- -- -- 28 29]
  [30 31 32 -- -- -- -- -- 38 39]
  [40 41 42 43 44 45 46 47 48 49]
  [50 51 52 53 54 55 56 57 58 59]
  [60 61 62 63 64 65 66 67 68 69]
  [70 71 72 73 74 75 76 77 78 79]
  [80 81 82 83 84 85 86 87 -- 89]
  [90 91 92 93 94 95 96 97 98 99]],

>我需要它看起来像这样:

06001

NB.哪里“?”可以取任何相邻的未屏蔽值.

最有效的方法是什么?

谢谢你的帮助.

解决方法

您可以使用np.roll进行移位的副本,然后在掩码上使用布尔逻辑来识别要填充的点:
import numpy as np
import numpy.ma as ma

a = np.arange(100).reshape(10,a==fill_value)
print(a)

# [[0 1 2 3 4 5 6 7 8 9]
#  [10 11 12 13 14 15 16 17 18 19]
#  [20 21 22 -- -- -- -- -- 28 29]
#  [30 31 32 -- -- -- -- -- 38 39]
#  [40 41 42 43 44 45 46 47 48 49]
#  [50 51 52 53 54 55 56 57 58 59]
#  [60 61 62 63 64 65 66 67 68 69]
#  [70 71 72 73 74 75 76 77 78 79]
#  [80 81 82 83 84 85 86 87 -- 89]
#  [90 91 92 93 94 95 96 97 98 99]]

for shift in (-1,1):
    for axis in (0,1):        
        a_shifted=np.roll(a,shift=shift,axis=axis)
        idx=~a_shifted.mask * a.mask
        a[idx]=a_shifted[idx]

print(a)

# [[0 1 2 3 4 5 6 7 8 9]
#  [10 11 12 13 14 15 16 17 18 19]
#  [20 21 22 13 14 15 16 28 28 29]
#  [30 31 32 43 44 45 46 47 38 39]
#  [40 41 42 43 44 45 46 47 48 49]
#  [50 51 52 53 54 55 56 57 58 59]
#  [60 61 62 63 64 65 66 67 68 69]
#  [70 71 72 73 74 75 76 77 78 79]
#  [80 81 82 83 84 85 86 87 98 89]
#  [90 91 92 93 94 95 96 97 98 99]]

如果你想要使用更大的最近邻居,你可能会这样做:

neighbors=((0,1),(0,-1),(1,0),(-1,2),-2),(2,(-2,0))

请注意,邻居中元素的顺序很重要.你可能想要用最近的邻居填写缺失的值,而不是任何邻居.可能有一个更聪明的方式来生成邻居序列,但是我目前还没有看到它.

a_copy=a.copy()
for hor_shift,vert_shift in neighbors:
    if not np.any(a.mask): break
    a_shifted=np.roll(a_copy,shift=hor_shift,axis=1)
    a_shifted=np.roll(a_shifted,shift=vert_shift,axis=0)
    idx=~a_shifted.mask*a.mask
    a[idx]=a_shifted[idx]

请注意,np.roll高兴地将下边缘滚动到顶部,因此顶部的缺失值可能会从底部的值填充.如果这是一个问题,我将不得不考虑如何解决它.明显但不是很聪明的解决方案是使用if语句并将边缘馈入不同的可接受邻居序列…

在Python numpy屏蔽数组中填入最近邻的缺失值?的更多相关文章

  1. ios – 从现有的NSArray创建新的NSArray的标准惯例是什么?

    假设我有一个NS元素的NSArray,长度为10个元素.我想创建第二个NSArray,其中包含每个字典上单个键的值.我能想到的最好方法是:但理论上,我应该能够不使用可变数组并将计数器与[nameArrayaddobjectAtIndex:count]结合使用,因为新列表应该与旧列表完全一样长.请注意,我不是要尝试过滤原始数组的子集,而是创建一个具有完全相同数量的元素的新数组,只需要从数组中每个元素

  2. Swift快速入门五集合

    相关文章Swift快速入门(一)第一个Swift程序Swift快速入门(二)基本数据类型Swift快速入门(三)运算符Swift快速入门(四)流程控制前言Swift提供了数组和字典两种集合类型来存储数据,Swift的数组用来存储顺序相同类型相同的类型,字典则采用kay-value的形式存储数据。修改字典字典提供了updataValue()方法来修改字典的value值,该方法会返回一个Sting?

  3. 理解Swift中map 和 flatMap对集合的作用

    map和flatMap是函数式编程中常见的概念,python等语言中都有。借助于map和flapMap函数能够很轻易地将数组转换成另外一个新数组。map函数能够被数组调用,它接受一个闭包作为参数,作用于数组中的每个元素。简单的说,map就是映射函数,把一个集合映射成另一个集合。Swift的flatMap不容易理解,flatMap很像map函数,但是它摒弃了那些值为nil的元素。为了处理可选类型,flatMap被重载过。

  4. 数组 – 如何在Swift中查找列表项的索引?

    我试图通过搜索列表找到项索引。有人知道如何做到吗?使用Swift2.0,Array获得使用在CollectionType的扩展中定义的函数来查找元素的索引的能力:此外,在CollectionType的另一个扩展中支持查找数组中满足谓词的第一个元素:注意,这两个函数返回可选值,如前所述。Swift3.0的更新:注意indexOf的语法已更改。

  5. 数组 – swift for循环:对于索引,数组中的元素?

    从Swift3.0开始,如果您需要每个元素的索引及其值,您可以使用enumerated()method遍历数组。它返回一个由索引和数组中每个项的值组成的元组。例如:在Swift3.0之前和Swift2.0之后,该函数被称为enumerate():在Swift2.0之前,枚举是一个全局函数。

  6. 如何确定Swift中变量的类型

    是否有一个函数来确定Swift中的变量类型?我想要一种方法来判断一个变量是一个Foundation对象或C变量在Swift。例如,我想知道下面第一个数组推断的类型:我已经看到了答案,判断一个给定的变量是一种给定类型在thisquestion,但我会说,这是非常不同于我想要的。您可以使用.dynamicType属性获取对值的类型对象的引用。这相当于Python的type()函数,并且提到了intheSwiftdocumentationunderLanguageReference:Types:Metatype

  7. 数组 – 为什么Swift迭代器比数组构建慢?

    这意味着,不知何故,迭代生成器比在内存中构造新数组花费更多的时间,然后迭代它.令人难以置信的是,它甚至比同一程序的python实现慢约5-70%,随着输入的减少而恶化.Swift是用-O标志构建的.这里有三个测试用例1.小输入,混合;2.大输入,[Int]显性,3.大输入,Int显性:迅速蟒蛇生成器和数组构建器:迅速蟒蛇基准测试结果:迅速蟒蛇显然,Swift非常非常擅长构建数组.但是为什么它的发生器在某些情况下如此慢,甚至比Python慢?

  8. 数组 – 在Swift中,最简单的方法是在Array中获取最后两个项目?

    有没有更清洁的方式来获取Swift中最后两个数组的项目?一般来说,我尝试避免使用这种方法,因为它很容易被一个一个的索引.我希望更接近Python的方便.myList[-2:]是的,我有一个增强请求,要求负号索引符号,我建议你也提交一个.但是,你不应该使自己比你更难.内置的全局后缀功能完全符合您的要求:结果是一个切片,但如果需要,您可以将其强制转换为数组.

  9. SpringBoot项目使用 axis 调用webservice接口的实践记录

    这篇文章主要介绍了SpringBoot项目使用 axis 调用webservice接口,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  10. 为什么0 || 1在php中返回true?

    在Javascript和Python中,0||1返回1.但在PHP中,0||1返回true.如果我想要0||怎么做1在PHP中返回1?另一个例子,$a是数组我想要$a[‘test’]||$a[0]||array()返回数组,怎么办?其他答案似乎只关心将布尔值转换为整数.我认为你真的希望第二个值是结果,如果第一个是假的?对于其他语言的行为,我们在PHP中最接近的是短手“三元”运算符:0?:1.这可以在你的脚本中使用,如:$result=get_something()?

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部