cupyx.scipy.ndimage.value_indices#

cupyx.scipy.ndimage.value_indices(arr, *, ignore_value=None, adaptive_index_dtype=False)[源代码]#

查找给定数组中每个不同值的索引。

参数:
  • arr (ndarray of ints) – 包含整数值的数组。

  • ignore_value (int, optional) – 在搜索 arr 数组时将忽略此值。如果未给定,则找到的所有值都将包含在输出中。默认为 None。

  • adaptive_index_dtype (bool, optional) – 如果为 True,则不返回默认的 CuPy 有符号整数 dtype,而是使用能够表示图像坐标范围的最小有符号整数 dtype。这可以显著减少内存使用,并略微缩短运行时。请注意,SciPy API 中没有此可选参数。

返回值:

indices – 一个 Python 字典,存储每个不同值的数组索引。字典的键是不同值,对应的值是数组索引元组,包含该值在数组中的所有出现位置。

这个字典可能占用大量内存,通常是输入数组大小的几倍。为了帮助减少内存开销,可以将参数 adaptive_index_dtype 设置为 True

返回类型:

dictionary

注意

对于具有少量不同值的小数组,可以使用 numpy.unique() 查找所有可能的值,并使用 (arr == val) 查找该值在数组中的位置。然而,对于具有许多不同值的大数组,这种方法会变得非常低效,因为查找每个值都需要对整个数组进行一次新的搜索。使用此函数,基本上只需要一次搜索,就可以保存所有不同值的索引。

这在将分类图像(例如分割或分类结果)与包含其他数据的相关图像匹配时非常有用,以便计算每个类别的统计量。它提供了比 scipy.ndimage.mean()scipy.ndimage.variance() 等函数更灵活的替代方案。

其他一些密切相关的功能,具有不同的优点和缺点,也可以在 scipy.stats.binned_statistic()scikit-image 函数 skimage.measure.regionprops() 中找到。

IDL 用户注意事项:此函数提供了与 IDL 的 REVERSE_INDICES 选项(根据 HISTOGRAM 函数的 IDL 文档)等效的功能。

自版本 1.10.0 新增。

示例

>>> import cupy
>>> from cupyx.scipy import ndimage
>>> a = cupy.zeros((6, 6), dtype=int)
>>> a[2:4, 2:4] = 1
>>> a[4, 4] = 1
>>> a[:2, :3] = 2
>>> a[0, 5] = 3
>>> a
array([[2, 2, 2, 0, 0, 3],
       [2, 2, 2, 0, 0, 0],
       [0, 0, 1, 1, 0, 0],
       [0, 0, 1, 1, 0, 0],
       [0, 0, 0, 0, 1, 0],
       [0, 0, 0, 0, 0, 0]])
>>> val_indices = ndimage.value_indices(a)

字典 val_indices 将为输入数组中的每个不同值包含一个条目。

>>> val_indices.keys()
dict_keys([0, 1, 2, 3])

每个值的条目是一个索引元组,用于定位具有该值的元素。

>>> ndx1 = val_indices[1]
>>> ndx1
(array([2, 2, 3, 3, 4]), array([2, 3, 2, 3, 4]))

这可用于索引原始数组或具有相同形状的任何其他数组。

>>> a[ndx1]
array([1, 1, 1, 1, 1])

如果忽略零,则结果字典将不再包含零的条目。

>>> val_indices = ndimage.value_indices(a, ignore_value=0)
>>> val_indices.keys()
dict_keys([1, 2, 3])