scipy.ndimage.

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)])