maxframe.tensor.in1d#

maxframe.tensor.in1d(ar1: TileableType | ndarray, ar2: TileableType | ndarray | list, assume_unique: bool = False, invert: bool = False)[源代码]#

测试一维张量中的每个元素是否也存在于第二个张量中。

返回一个与 ar1 长度相同的布尔张量,当 ar1 中的元素在 ar2 中时为 True,否则为 False。

我们建议在新代码中使用 isin() 而不是 in1d

参数:
  • ar1 ((M,) Tensor) -- 输入张量。

  • ar2 (array_like) -- 用于测试 ar1 中每个值的参考值。

  • assume_unique (bool, optional) -- 如果为 True,则假定输入张量中的元素都是唯一的,这可以加快计算速度。默认为 False。

  • invert (bool, optional) -- 如果为 True,则返回张量中的值会被反转(即 ar1 中存在于 ar2 的元素对应为 False,否则为 True)。默认为 False。np.in1d(a, b, invert=True) 等价于(但比)``np.invert(in1d(a, b))`` 更快。

返回:

in1d -- ar1[in1d] 中的值存在于 ar2 中。

返回类型:

(M,) Tensor, bool

参见

isin

保留 ar1 形状的该函数版本。

numpy.lib.arraysetops

包含多个用于对数组执行集合操作的函数的模块。

备注

in1d 可以看作是 Python 关键字 in 在一维序列上的逐元素函数版本。in1d(a, b) 大致等价于 mt.array([item in b for item in a])。但如果 ar2 是集合或类似的(非序列)容器,这种想法就会失败:因为 ar2 会被转换为张量,在这些情况下 asarray(ar2) 是一个对象张量,而不是预期的包含值的张量。

示例

>>> import maxframe.tensor as mt
>>> test = mt.array([0, 1, 2, 5, 0])
>>> states = [0, 2]
>>> mask = mt.in1d(test, states)
>>> mask.execute()
array([ True, False,  True, False,  True])
>>> test[mask].execute()
array([0, 2, 0])
>>> mask = mt.in1d(test, states, invert=True)
>>> mask.execute()
array([False,  True, False,  True, False])
>>> test[mask].execute()
array([1, 5])