value_indices#
- scipy.ndimage.value_indices(arr, *, ignore_value=None)[源代码]#
查找给定数组中每个不同值的索引。
- 参数:
- arr整数的 ndarray
包含整数值的数组。
- ignore_valueint,可选
在搜索 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 选项等效的功能(根据 HISTOGRAM 函数的 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)])