【问题标题】:Deleting elements from a list if that value is masked in another list如果该值在另一个列表中被屏蔽,则从列表中删除元素
【发布时间】:2017-09-14 14:06:40
【问题描述】:

我导入了格式为 numpy 掩码递增整数数组的数据。被掩蔽的元素是不规则的并且不重复,例如打印它会产生:

masked = [0,1,--,3,--,5,6,--,--,9,--]

我还有另一个不是从零开始的递增数字列表,并且有不规则的间隙,并且与masked的大小不同:

data = [1,3,4,6,7,9,10]

如果data 的任何元素的值是masked 中的掩码元素,我想删除它

所以我得到:

result = [1,3,6,9]

因为 4、7 和 10 是 masked 中的掩码值。

我认为我的伪代码应该类似于:

for i in len(masked):
    if masked[i] = 'masked' && data[i] == [i]:
        del data[i]

但我无法协调两个数组的不同长度和不匹配的索引,

感谢您的帮助!

【问题讨论】:

    标签: python list masked-array


    【解决方案1】:

    确保data 是一个数组:

    data = np.asarray(data)
    

    然后:

    data[~masked.mask[data]]
    

    这将非常快,尽管它确实假设您的掩码数组包含从 0 到至少 max(data) 的所有数字。

    【讨论】:

      【解决方案2】:

      您可以使用 set 函数来获取列表的集合并获取它们的交集。 这是一个演示:-

      >>> import numpy as np
      >>> import numpy.ma as ma
      >>> arr = np.array([x for x in range(11)])
      >>> masked = ma.masked_array(arr, mask=[0,0,1,0,1,0,0,1,1,0,1])
      >>> masked
      masked_array(data = [0 1 -- 3 -- 5 6 -- -- 9 --],
                   mask = [False False  True False  True False False  True  True False
        True],
             fill_value = 999999)
      
      >>> data = np.array([1,3,4,6,7,9,10])
      >>> result = list(set(data) & set(masked[~masked.mask]))
      >>> result
      [1, 3, 6, 9]
      >>>
      

      【讨论】:

      • 我收到一个错误 'TypeError: unhashable type: 'MaskedConstant'' 有什么想法吗?
      • 上次编辑不正确,请尝试更新。对不起!
      猜你喜欢
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-21
      • 1970-01-01
      • 1970-01-01
      • 2017-01-03
      相关资源
      最近更新 更多