Die Rückgabewerte von argrelmax
sind die Array-Indizes der relativen Maxima. Zum Beispiel
In [47]: np.random.seed(12345)
In [48]: x = np.random.randint(0, 10, size=(10, 3))
In [49]: x
Out[49]:
array([[2, 5, 1],
[4, 9, 5],
[2, 1, 6],
[1, 9, 7],
[6, 0, 2],
[9, 1, 2],
[6, 7, 7],
[7, 8, 7],
[1, 7, 4],
[0, 3, 5]])
In [50]: i, j = argrelmax(x, axis=0)
In [51]: i
Out[51]: array([1, 1, 3, 3, 5, 7, 7])
In [52]: j
Out[52]: array([0, 1, 1, 2, 0, 0, 1])
i
enthält die Zeilen und j
enthält die Spalten der relativen Maxima. Z.B. x[1, 0]
enthält den Wert 4
, der in der ersten Spalte ein relatives Maximum darstellt, und x[1, 1]
enthält den Wert 9
, der in der zweiten Spalte ein relatives Maximum darstellt.
Um die lokale Maxima Spalte für Spalte zu verarbeiten, könnten Sie so etwas tun:
In [56]: for col in range(x.shape[1]):
....: mask = j == col
....: print("Column:", col, " Position of local max:", i[mask])
....:
Column: 0 Position of local max: [1 5 7]
Column: 1 Position of local max: [1 3 7]
Column: 2 Position of local max: [3]
Gleiches gilt für Ihre 3D-Array gilt. Im Folgenden einen viel kleineren 3D-Array als Beispiel verwendet:
In [73]: np.random.seed(12345)
In [74]: data = np.random.randint(0, 10, size=(10, 3, 2))
In [75]: i, j, k = argrelmax(data, axis=0)
Um die Positionen der relativen Maxima in der Scheibe zu bekommen data[:, 0, 0]
, könnten Sie tun:
In [76]: mask00 = (j == 0) & (k == 0)
In [77]: i[mask00]
Out[77]: array([5, 8])
überprüfen Sie, ob das sind die Indizes der die lokalen Maxima:
In [78]: data[:, 0, 0]
Out[78]: array([2, 2, 6, 6, 1, 7, 3, 0, 8, 7])
Ah, das macht jetzt total Sinn. In meinem Fall geben sie einfach die 3d Koordinaten jedes Maximums zurück. – Raubtaube