scipy.ndimage.

value_indices#

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

查找给定数组中每个不同值的下标。

参数:
arr整数型 ndarray

包含整数值的数组。

ignore_value整型,可选

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

返回:
indices字典

一个 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 文档)。

已添加到版本 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)])