scipy.ndimage.

value_indices#

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

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

参数:
arrint 的 ndarray

包含整数值的数组。

忽略值int, 可选

此值在搜索 arr 数组时将被忽略。如果未指定,则所有找到的值都将包含在输出中。默认为 None。

返回:
索引字典

一个包含每个不同值的数组索引的Python字典。字典的键是不同的值,条目是覆盖数组中该值所有出现的数组索引元组。

这个字典可以占用大量内存,通常是输入数组大小的几倍。

注释

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

这在匹配分类图像(例如分割或分类)与相关联的其他数据图像时非常有用,允许计算任何按类的统计数据。提供了一种比 scipy.ndimage.mean()scipy.ndimage.variance() 等函数更灵活的替代方案。

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

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

Added in version 1.10.0.

示例

>>> import numpy as np
>>> from scipy import ndimage
>>> a = np.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([np.int64(0), np.int64(1), np.int64(2), np.int64(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([np.int64(1), np.int64(2), np.int64(3)])