value_indices#
- scipy.ndimage.value_indices(arr, *, ignore_value=None)[source]#
尋找給定陣列中每個相異值的索引。
- 參數:
- 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 關於 HISTOGRAM 函數的文件)。
在 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)])