jax.numpy.delete

目录

jax.numpy.delete#

jax.numpy.delete(arr, obj, axis=None, *, assume_unique_indices=False)[源代码][源代码]#

从数组中删除条目或多个条目。

JAX 实现的 numpy.delete()

参数:
  • arr (ArrayLike) – 将从其中删除条目的数组。

  • obj (ArrayLike | slice) – 要删除的索引、索引或切片。

  • axis (int | None) – 将沿其删除条目的轴。

  • assume_unique_indices (bool) – 对于类似数组的整数(非布尔)索引,假设索引是唯一的,并以兼容JIT和其他JAX变换的方式执行删除操作。

返回:

arr 的副本,删除了指定的索引。

返回类型:

Array

备注

delete() 通常需要索引规范是静态的。如果索引是一个保证包含唯一条目的整数数组,您可以指定 assume_unique_indices=True 以不要求静态索引的方式执行操作。

示例

从一维数组中删除条目:

>>> a = jnp.array([4, 5, 6, 7, 8, 9])
>>> jnp.delete(a, 2)
Array([4, 5, 7, 8, 9], dtype=int32)
>>> jnp.delete(a, slice(1, 4))  # delete a[1:4]
Array([4, 8, 9], dtype=int32)
>>> jnp.delete(a, slice(None, None, 2))  # delete a[::2]
Array([5, 7, 9], dtype=int32)

从二维数组中沿指定轴删除条目:

>>> a2 = jnp.array([[4, 5, 6],
...                 [7, 8, 9]])
>>> jnp.delete(a2, 1, axis=1)
Array([[4, 6],
       [7, 9]], dtype=int32)

通过一系列索引删除多个条目:

>>> indices = jnp.array([0, 1, 3])
>>> jnp.delete(a, indices)
Array([6, 8, 9], dtype=int32)

这将在 jit() 和其他变换下失败,因为输出形状无法在可能存在重复索引的情况下确定:

>>> jax.jit(jnp.delete)(a, indices)  
Traceback (most recent call last):
  ...
ConcretizationTypeError: Abstract tracer value encountered where concrete value is expected: traced array with shape int32[3].

如果你能确保索引是唯一的,传递 assume_unique_indices 以允许在JIT下执行此操作:

>>> jit_delete = jax.jit(jnp.delete, static_argnames=['assume_unique_indices'])
>>> jit_delete(a, indices, assume_unique_indices=True)
Array([6, 8, 9], dtype=int32)