【问题标题】:Mask with numpy isin带有 numpy isin 的掩码
【发布时间】:2021-09-13 23:15:03
【问题描述】:

我想用 numpy 数组制作一个掩码。我找到了一个功能,但它不能满足我的要求。下面是代码示例:

np.isin([1,2,3,4,5,8,6,1,1],[1,2,3,5,1])

这段代码返回这个:

array([ True,  True,  True, False,  True, False, False,  True,  True], dtype=bool)

但我想要相同的输出,除了输出数组的最后一个值为 False。因为我需要按这个顺序精确地掩码序列 ([1,2,3,5,1]),并且不超过它的长度。

【问题讨论】:

  • isin 是一个类似测试的集合。左侧数组中的每个1 都在右侧找到;右侧的值不会被匹配用完。在您的问题中,这些值是否总是以相同的顺序出现?如果右手包含[1,1,2,3,1,5]怎么办?

标签: python arrays numpy


【解决方案1】:

您可以在一定数量的Trues 之后将元素归零:

mask[mask.cumsum() > 5] = False
#                    ^ length of the second array

import numpy as np
mask = np.isin([1,2,3,4,5,8,6,1,1],[1,2,3,5,1])

mask[mask.cumsum() > 5] = False
mask
# array([ True,  True,  True, False,  True, False, False,  True, False], dtype=bool)

【讨论】:

  • 感谢您的回答,这是对我问题的回答,但不是对我的问题的回答。我已经编辑了我的问题以使其更清楚。
  • 在 numpy 中矢量化您所要求的内容并不容易(不是我在几分钟内能想到的);您可能需要为此编写循环。
  • 我猜你是对的,它需要 2 个循环,我只是在寻找更多优化变体
  • 如果您正在寻找速度,您可以查看numba
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-23
  • 2013-05-19
  • 1970-01-01
  • 2019-10-29
  • 2021-02-25
  • 1970-01-01
相关资源
最近更新 更多