mars.tensor.in1d#

mars.tensor.in1d(ar1: 联合[TileableType, ndarray], ar2: 联合[TileableType, ndarray, 列表], assume_unique: 布尔型 = False, invert: 布尔型 = False)[来源]#

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

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

我们建议在新代码中使用 isin() 替代 in1d

Parameters
  • ar1 ((M,) 张量) – 输入张量。

  • 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)) 更快。

Returns

in1d – 值 ar1[in1d]ar2 中。

Return type

(M,) 张量, bool

另请参阅

isin

该函数的版本可以保持ar1的形状。

numpy.lib.arraysetops

模块包含多个用于在数组上执行集合操作的其他函数。

备注

in1d 可以被视为 python 关键字 in 的元素级函数版本,用于 1-D 序列。 in1d(a, b) 大致相当于 mt.array([item in b for item in a])。然而,当 ar2 是一个集合或类似的(非序列)容器时,这个想法就失效了:因为 ar2 被转换为一个张量,在这些情况下 asarray(ar2) 是一个对象张量,而不是预期的包含值的张量。

示例

>>> import mars.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])