jax.numpy.intersect1d#

jax.numpy.intersect1d(ar1, ar2, assume_unique=False, return_indices=False, *, size=None, fill_value=None)[source]#

计算两个一维数组的集合交集。

JAX 对 numpy.intersect1d() 的实现。

由于 intersect1d 的输出大小依赖于数据,该函数通常不兼容 jit() 和其他 JAX 转换。JAX 版本添加了可选的 size 参数,必须静态指定此参数才能在这些上下文中使用 jnp.intersect1d

参数:
  • ar1 (ArrayLike) – 要进行交集运算的第一个数组。

  • ar2 (ArrayLike) – 要进行交集运算的第二个数组。

  • assume_unique (bool) – 如果为 True,则假定输入数组包含唯一值。这允许更高效的实现,但如果 assume_unique 为 True 且输入数组包含重复项,则行为未定义。默认值:False。

  • return_indices (bool) – 如果为 True,则返回索引数组,指定交集值首次出现在输入数组中的位置。

  • size (int | None) – 如果指定,则只返回前 size 个排序元素。如果元素少于 size 指定的数量,返回值将用 fill_value 填充,返回的索引将用越界索引填充。

  • fill_value (ArrayLike | None) – 当指定 size 且元素数量少于指示的数量时,用 fill_value 填充剩余的条目。默认为交集中的最小值。

返回:

一个数组 intersection,或者如果 return_indices=True,则是一个数组元组 (intersection, ar1_indices, ar2_indices)。返回值为

  • intersection: 一个一维数组,包含同时出现在 ar1ar2 中的每个值。

  • ar1_indices: (如果 return_indices=True 则返回) 一个形状为 intersection.shape 的数组,包含 intersection 中值在扁平化 ar1 中的索引。对于一维输入,intersection 等同于 ar1[ar1_indices]

  • ar2_indices: (如果 return_indices=True 则返回) 一个形状为 intersection.shape 的数组,包含 intersection 中值在扁平化 ar2 中的索引。对于一维输入,intersection 等同于 ar2[ar2_indices]

返回类型:

数组 | 元组[数组, 数组, 数组]

另请参阅

示例

>>> ar1 = jnp.array([1, 2, 3, 4])
>>> ar2 = jnp.array([3, 4, 5, 6])
>>> jnp.intersect1d(ar1, ar2)
Array([3, 4], dtype=int32)

计算带索引的交集

>>> intersection, ar1_indices, ar2_indices = jnp.intersect1d(ar1, ar2, return_indices=True)
>>> intersection
Array([3, 4], dtype=int32)

ar1_indices 提供 ar1 中交集值的索引

>>> ar1_indices
Array([2, 3], dtype=int32)
>>> jnp.all(intersection == ar1[ar1_indices])
Array(True, dtype=bool)

ar2_indices 提供 ar2 中交集值的索引

>>> ar2_indices
Array([0, 1], dtype=int32)
>>> jnp.all(intersection == ar2[ar2_indices])
Array(True, dtype=bool)