【问题标题】:Deleting masked elements in numpy array删除numpy数组中的屏蔽元素
【发布时间】:2017-12-18 10:52:48
【问题描述】:

我有一些包含掩码元素的数组(来自Numpy.MaskedArray),例如

data = [0,1,masked,3,masked,5,...]

掩码不遵循常规模式。

我想遍历数组并简单地删除所有被屏蔽的元素以结束:

data = [0,1,3,5,...]

我试过这样的循环:

for i in xrange(len(data)):
    if np.ma.is_masked(data[i]):
        data.pop(i)

但我得到了错误:local variable 'data' referenced before assignment

我必须创建一个新数组并添加未屏蔽的元素吗?还是有一个MaskedArray 函数可以自动做到这一点?我看过文档,但对我来说并不明显。

谢谢!

【问题讨论】:

  • 掩码到底是什么?你能提供一个minimal reproducible example吗?
  • 您的错误与您的问题无关
  • [x for x in data if isinstance(x,(int))] ?
  • @JejeBelfort 这刚刚返回了原始列表

标签: python arrays list numpy


【解决方案1】:

data.compressed() 是您要查找的函数

【讨论】:

  • 这不起作用,我收到AttributeError: 'list' object has no attribute 'compress' 错误
  • @RichardHall 基于此错误,您可能输入了错误的函数名称。 @Eric 的解决方案是 compressed,而你的错误是 compress
  • @emem_tee,看起来 datalist,而不是 numpy 掩码数组 (numpy.ma.MaskedArray)。
【解决方案2】:

带掩码位反转 ~:

data = data[~data.mask]

【讨论】:

  • 我收到错误:AttributeError: 'list' object has no attribute 'mask'
  • @RichardHall,但你写过你已经屏蔽了 numpy 数组
  • 实际上我找到了,我将蒙面元素转换为 NaN 并没有看到,所以我收到了这些错误。当我删除它时,您的解决方案有效,谢谢:)
  • 请注意,与我的解决方案不同,这将返回一个掩码数组,而不是普通数组
  • @Vlad 和 Eric,您能描述一下您是如何确定它们是不同的数组类型的吗?新用户可能不知道如何检查对象的额外属性。 np.array_equal(data.compressed(), data[~data.mask]) 解析为 True
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-03
  • 2021-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-13
  • 1970-01-01
相关资源
最近更新 更多